JMS-Java消息服务(Java Message Service)应用程序接口

     

       JMS是Java平台中面向消息中间件(MOM)的API,绝大多数MOM提供商都对JMS提供支持,类似于连接驱动程序。简单理解:两个应用程序之间需要通信,使用JMS服务,进行中间转发(异步通信),可以解除应用耦合。

       JMS两大优势。异步:JMS是一个异步的消息服务;可靠:JMS保证消息只会递送一次。

      JMS两种消息模式:

                                             

                                                           Point-to-Point Messaging Domain (点对点)

 

                                               

                                                     Publish/Subscribe Messaging Domain (发布/订阅模式)

 

       JMS接收消息:同步、异步两种模式

       同步:订阅者/接收方通过调用 receive()接收消息,在receive()方法中,线程会阻塞直到消息到达或者到指定时间后消息仍未到达;异步:消息订阅者需注册一个消息监听者,类似于事件监听器,只要消息到达,JMS服务提供者会通过调用监听器的onMessage()递送消息。

     JMS编程模型

                                                            

 

1.管理对象(Administered objects)-连接工厂(Connection Factories)和目的地(Destination);

2.连接对象(Connections);

3.会话(Sessions);

4.消息生产者(Message Producers);

5.消息消费者(Message Consumers);

6.消息监听者(Message Listeners);

(1)、Connection Factories

       创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。客户端使用一个连接工厂对象连接到JMS服务提供者,它创建了JMS服务提供者和客户端之间的连接。JMS客户端(如发送者或接受者)会在JNDI名字空间中搜索并获取该连接。使用该连接,客户端能够与目的地通讯,往队列或话题发送/接收消息。

       QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) initialCtx.lookup ("primaryQCF");

       Queue purchaseQueue = (Queue) initialCtx.lookup ("Purchase_Queue");

       Queue returnQueue = (Queue) initialCtx.lookup ("Return_Queue");

(2)、Destination

      目的地指明消息被发送的目的地以及客户端接收消息的来源。JMS使用两种目的地,队列和话题。如下代码指定了一个队列和话题: 创建一个队列Session:

      QueueSession ses = con.createQueueSession (false, Session.AUTO_ACKNOWLEDGE);  //get the Queue object

      Queue t = (Queue) ctx.lookup ("myQueue");  //create QueueReceiver  

      QueueReceiver receiver = ses.createReceiver(t);

(3)、Connection Connection

      表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。 连接对象封装了与JMS提供者之间的虚拟连接,如果我们有一个ConnectionFactory对象,可以使用它来创建一个连接。

      Connection connection = connectionFactory.createConnection();

(4)、Session

      Session 是我们对消息进行操作的接口,可以通过session创建生产者、消费者、消息等。Session 提供了事务的功能,如果需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。 我们可以在连接创建完成之后创建session: Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 这里面提供了参数两个参数,第一个参数是是否支持事务,第二个是事务的类型

(5)、Producter

       消息生产者由Session创建,用于往目的地发送消息。生产者实现MessageProducer接口,我们可以为目的地、队列或话题创建生产者;

       MessageProducer producer = session.createProducer(dest);

       MessageProducer producer = session.createProducer(queue);

      MessageProducer producer = session.createProducer(topic);

(6)、Consumer

      消息消费者由Session创建,用于接收被发送到Destination的消息。

      MessageConsumer consumer = session.createConsumer(dest);

      MessageConsumer consumer = session.createConsumer(queue);

      MessageConsumer consumer = session.createConsumer(topic);

(7)、MessageListener

         消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。   

                

    JMS是一种与厂商无关的 API,Java消息服务是一个在 Java标准化组织(JCP)内开发的标准。

 

更多推送文章请关注公众号:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值