`

JMS 公共接口

    博客分类:
  • jms
阅读更多
关键字: JMS
ConnectionFactory 是一个可以从JNDI检索的受管理对象,它建立了到提供者的连接。它包含 createConnection() 方法,该方法返回了一个 Connection 对象。

Connection 封装了一个连接到提供者的活动连接。它的一些方法包括:

createSession(boolean, int):返回一个 Session 对象。boolean 参数指出 Session 是否被处理, int 则指出确认模式(请参阅 确认)。


start():激活提供者发送消息。


stop():临时停止消息的发送,可以用 start() 重新开始发送。


close():关闭到提供者的连接,并释放以它的名义占用的所有资源。


Session 是用来发送和接收消息的单线程的上下文。它的一些方法包括:

createProducer(Destination):返回一个 MessageProducer 对象,向指定的 Destination 发送消息。


createConsumer(Destination):返回一个 MessageConsumer 对象来接收来自指定 Destination 的消息。


commit():提交当前事务的所有使用的或者产生的消息。


rollback():回滚当前事务所有使用的或者产生的消息。


create<MessageType>Message(...):一组返回 <MessageType>Message 的方法——例如,MapMessage、TextMessage 等。


Destination 封装消息的目的地。它是一个从 JNDI 检索的受管理对象。

MessageProducer 用于发送消息。它的一些方法包括:

send(Message):发送指示的 Message。


setDeliveryMode(int):设置后续消息的发送模式,有效值为 DeliveryMode.PERSISTENT 和 DeliveryMode.NON_PERSISTENT。


setPriority(int):设置后续发送消息的优先级,有效值为 0 到 9。


setTimeToLive(long):设置后续发送消息失效前的持续时间,以毫秒计。

MessageConsumer 被用来接收消息。它的一些方法包括:

receive():返回下一发到达的消息,该方法在消息可用之前会受到阻塞。


receive(long):接收在 long 毫秒内到达的下一个消息,如果在时间限制内没有消息到达,则该方法返回 null。


receiveNoWait:如果有一个消息立即可用,则接收下一个消息,如果没有消息可用,则该方法返回 null。


setMessageListener(MessageListener):设置 MessageListener,MessageListener 对象在消息到达时接收它们,也就是异步接收(请参阅 MessageListener )。


MessageListener 是有一个单一方法——onMessage(Message)——的接口,它提供了消息的异步接收和处理。

应该通过客户机类和该类使用 setMessageListener(MessageListener) 方法传递给 MessageConsumer 对象的实例来实现这个接口。在消息到达目的地时,用 onMessage(Message) 将它传递给对象。


例子:
Sender.java
import java.io.*;
import javax.jms.*;
import javax.naming.*;

public class Sender {

    public static void main(String[] args) {

        new Sender().send();
    }

    public void send() {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            //Prompt for JNDI names
            System.out.println("Enter ConnectionFactory name:");
            String factoryName = reader.readLine();
            System.out.println("Enter Destination name:");
            String destinationName = reader.readLine();

            //Look up administered objects
            InitialContext initContext = new InitialContext();
            ConnectionFactory factory =
                (ConnectionFactory) initContext.lookup(factoryName);
            Destination destination = (Destination) initContext.lookup(destinationName);
            initContext.close();

            //Create JMS objects
            Connection connection = factory.createConnection();
            Session session =
                connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer sender = session.createProducer(queue);

            //Send messages
            String messageText = null;
            while (true) {
                System.out.println("Enter message to send or 'quit':");
                messageText = reader.readLine();
                if ("quit".equals(messageText))
                    break;
                TextMessage message = session.createTextMessage(messageText);
                sender.send(message);
            }

            //Exit
            System.out.println("Exiting...");
            reader.close();
            connection.close();
            System.out.println("Goodbye!");

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}



Java代码 复制代码
  1.   
  2.   
  3. Sender 类有两个方法:main(String[]) 和 send()。main(String[]) 方法只是举例说明了 Sender 并调用了它的 send() 方法。    
  4.   
  5. send() 方法的第一部分提示了将用来发送消息的受管理对象的 JNDI 名。    
  6.   
  7. send() 方法的下一部分用前面输入的名字在 JNDI 中查询受管理的对象。   
  8.   
  9. 通过举例说明 InitialContext 对象访问了 JNDI,通过调用 lookup(String) 方法并传递要获取的对象的名字来检索受管理的对象。注意, lookup(String) 方法返回 Object,所以必须对返回的对象进行类型强制转换(typecast)。    
  10.   
  11.   
  12.   
  13. Receiver.java    
  14.   
  15. <PRE class=java name="code">import java.io.*;   
  16. import javax.jms.*;   
  17. import javax.naming.*;   
  18.   
  19. public class Receiver implements MessageListener {   
  20.   
  21.     private boolean stop = false;   
  22.   
  23.     public static void main(String[] args) {   
  24.   
  25.         new Receiver().receive();   
  26.     }   
  27.   
  28.     public void receive() {   
  29.   
  30.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  31.   
  32.         try {   
  33.             //Prompt for JNDI names   
  34.             System.out.println("Enter ConnectionFactory name:");   
  35.             String factoryName = reader.readLine();   
  36.             System.out.println("Enter Destination name:");   
  37.             String destinationName = reader.readLine();   
  38.             reader.close();   
  39.   
  40.             //Look up administered objects   
  41.             InitialContext initContext = new InitialContext();   
  42.             ConnectionFactory factory =   
  43.                 (ConnectionFactory) initContext.lookup(factoryName);   
  44.             Destination destination = (Destination) initContext.lookup(destinationName);   
  45.             initContext.close();   
  46.   
  47.             //Create JMS objects   
  48.             Connection connection = factory.createConnection();   
  49.             Session session =   
  50.                 connection.createSession(false, Session.AUTO_ACKNOWLEDGE);   
  51.             MessageConsumer receiver = session.createConsumer(queue);   
  52.             receiver.setMessageListener(this);   
  53.             connection.start();   
  54.   
  55.             //Wait for stop   
  56.             while (!stop) {   
  57.                 Thread.sleep(1000);   
  58.             }   
  59.   
  60.             //Exit   
  61.             System.out.println("Exiting...");   
  62.             connection.close();   
  63.             System.out.println("Goodbye!");   
  64.   
  65.         } catch (Exception e) {   
  66.             e.printStackTrace();   
  67.             System.exit(1);   
  68.         }   
  69.     }   
  70.   
  71.     public void onMessage(Message message) {   
  72.   
  73.         try {   
  74.             String msgText = ((TextMessage) message).getText();   
  75.             System.out.println(msgText);   
  76.             if ("stop".equals(msgText))   
  77.                 stop = true;   
  78.         } catch (JMSException e) {   
  79.             e.printStackTrace();   
  80.             stop = true;   
  81.         }   
  82.     }   
  83. }</PRE>   
  84. <BR>   
  85. <BR>boolean stop 实例变量用来指出程序应该退出。   
  86. <BR>   
  87. <BR>Receiver 实现了 MessageListener 接口,为了异步接收消息   
  88. <BR>    
分享到:
评论

相关推荐

    JMS中间件ActiveMQ介绍

    #### JMS 公共接口 - **JMSConnection**:创建连接。 - **JMSSession**:生产和消费消息的上下文。 - **MessageProducer**:创建并发送消息。 - **MessageConsumer**:接收消息。 - **Message**:消息实体。 - **...

    JMS远程调用

    2. **定义接口**:定义一个公共接口,比如`CheckingAccountService`,其中包含需要远程调用的方法。这个接口将在客户端和服务端都需引用。 3. **实现接口**:在服务端,我们需要实现这个接口,例如`...

    JMS规范1.1

    JMS规范还定义了公共工具,比如连接工厂(ConnectionFactory)、目的地(Destination)和连接(Connection)。连接工厂用于创建JMS连接,目的地代表消息的发送和接收位置,连接则提供客户端与消息服务之间的通信通道...

    Spring JMS

    JMS 模板类提供了执行公共操作的 helper 方法,在需要更复杂应用的情况下,类把处理任务的核心委托给用户实现的回调接口。 Spring JMS 还提供了转换 JMSException 的功能,转换代码把检测到的 JMSException 层次...

    JMS1.1规范中文版

    **JMS公共工具**提供了构建JMS应用所需的基础设施。 - **受管理的对象**:如`Destination`、`ConnectionFactory`等,用于创建和管理JMS资源。 - **Connection**:表示与消息中间件的连接,是JMS应用的核心对象。 - ...

    jms specification

    - **分发实现**: 您可以向第三方分发规范的实现以供测试和评估使用,条件是此类实现不得修改、子集、超集或其他方式扩展许可方命名空间,或包含该命名空间内的公共或受保护包、类、Java接口、字段或方法,除非这些...

    JMS消息服务详解

    Java消息服务(JMS)是Java平台上的一个标准API,它定义了一套通用接口,用于与多种消息服务器进行交互。JMS提供了一种统一的访问方式,类似于JDBC和JNDI,使得开发者可以使用相同的API来访问IBM的MQSeries和JBossMQ...

    用JMS手工实现私聊和公聊

    JMS是Java平台中用于在分布式环境中传递消息的标准接口,常用于企业级应用中的异步通信。 首先,我们要理解JMS的基本概念。JMS提供两种消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,...

    JNDI,JTA和JMS简介

    JMS是一种通用的消息传递系统,提供了发送和接收消息的通用接口,让不同的消息服务提供商能够以相同的方式进行操作。 JMS的核心组件包括消息生产者(Message Producer)、消息消费者(Message Consumer)和消息队列...

    wmq.jmsra-7.0.1.3.rar

    这个资源适配器允许应用程序在Wildfly(一种流行的Java应用服务器)上与WebSphere MQ消息中间件进行交互,实现JMS接口的特性,如发布/订阅、队列、事务等。 描述中提到的“wildfly standalone deployments”意味着...

    SOA架构十大设计原则

    例如,在一个典型的SOA环境中,一个服务可能通过WSDL发布其公共接口,这个接口将描述该服务能够提供的功能、接受的数据格式以及返回的结果类型等信息。同时,服务的内部实现可以是任何技术栈下的代码实现,甚至可以...

    基于JavaEE的公共自行车租赁管理系统_JSP网站设计_SqlServer数据库设计.rar

    10. **文档与接口**:良好的文档是项目成功的关键,包括需求文档、设计文档、API接口文档等,有助于团队理解和维护系统。 综上所述,这个基于JavaEE的公共自行车租赁管理系统涵盖了Web开发的多个层面,从前端用户...

    Java消息服务中文版

    Java消息服务(Java Message Service,JMS)是一组Java应用程序接口(Java API),它提供...由Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能够和其他消息组件进行通信。

    ActiveMQ in Action

    JMS提供了一组公共的接口和行为,使得开发者可以在不同消息代理之间切换而不必重写代码。 3. 消息中间件:介绍了消息中间件的概念,它是支持系统间异步通信的一类软件,使得分布式系统能够通过消息传递进行通信和...

    EJB基础入门与总结

    客户端通过Bean的公共接口进行操作。实现类(Bean类)在运行时实例化,成为分布式对象。Bean分为三种类型: - SessionBean:处理客户端请求,通常用于短期、状态化的交互。 - EntityBean:代表持久性的商业实体,与...

    用 Web 服务和 J2EE 集成企业应用程序

    例如,通过使用基于Web服务的公共接口,开发人员可以更容易地将后端系统集成到J2EE环境中,支持更高级别的自动化,并促进后端系统的互相连接。 #### 参考资料 为了更深入地理解本文涉及的概念和技术,以下是一些...

    中间件课件(COM,CORABA,EJB)

    EJB有三种主要类型:会话bean(Session Beans)处理业务逻辑,实体bean(Entity Beans)表示持久化数据,消息驱动bean(Message-Driven Beans)用于接收和处理JMS消息。学习EJB需要理解容器管理的生命周期、ejb-jar....

Global site tag (gtag.js) - Google Analytics