【知识积累】(一)、消息中间件 - JMS

一、JMS定义

JMS(Java Message Server)即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件(MOM:Message Oriented Middleware)的API,用于两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。我们可以简单的理解:两个应用程序之间的需要进行通信,我们使用JMS服务,进行中间的转发,通过JMS的使用,我们可以解除两个程序之间的耦合。

也是J2EE的13个规范之一,提供的是消息中间件的规范。

二、优点
1、异步

JMS是一个异步的消息服务,客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端。

2、可靠

JMS保证消息只会发送一次,解决重发创建消息问题。

三、通信模式(两种通信模式互相独立)
1、点对点模式(point - to - point)

由Queue、发送方、接收方组成,发送方将消息发送对Queue,接收方从Queue获取消息。队列保存消息,直到该消息被消费或超时。

     特点:

             每个消息只有一个消费者,只能消费一次;

             发送者发送消息的过程中,不管消费者是否接收,都不影响发送者。

             接收方接收到消息后,需要向Queue Reply。

             【知识积累】(一)、消息中间件 - JMS

2、发布/订阅模式(Publish/Subscribe)

由Topic、发布者、订阅者组成,发布者和订阅者互不影响,并且可以动态的发布和订阅Topic,Topic用于保存和传送消息。

    特点:

             每个消息可以有多个消费者,而且订阅一个Topic的消费者,只能消费它订阅之后发布的消息;

             发布者和订阅者,具有时间约束。订阅Topic,需要先创建消费者,才能消费,并且消费者需要一直处于运行状态;

             JMS允许创建一个可持久的订阅者,即使订阅者没有运行,也可接收到消息。

             【知识积累】(一)、消息中间件 - JMS

四、JMS接收消息

消息产生和消费是异步,消费有两种方式:

1、同步

订阅者或者接收方通过receive()方法来接收消息。在receive方法中,线程会阻塞直到消息到达或者到指定时间后消息未到达。

2、异步 

消息订阅者需要注册一个消息监听器,类型于事件监听器,只要消息到达,JMS服务提供者会通过调用监听器的onMessage()传送消息。

五、JMS编程模型

【知识积累】(一)、消息中间件 - JMS

1、ConnectionFactory

创建链接工厂,针对两种通信模式,分别有QueueConnectionFactory和TopicConnectionFactory两种。

创建了一个链接,连接Producer和Consumer,Producer或者Consumer会在JNDI名字空间中搜索并获取该链接,使用这个链接,完成消息的传送。

2、Connection

对TCP/IP Socket的包装。可以创建一个或多个Session,和ConnectionFactory一样,Connection分为QueueConnection和TopicConnection两种。

3、Session

对消息进行操作的API,可以创建Producer、Consumer、Message等。Session提供事务功能,使用Session发送或接收多个Message时,可以将这些操作放到一个事务中。

【知识积累】(一)、消息中间件 - JMS

    消息确认机制

    Session.AUTO_ACKNOWLEDGE:直接使用receive方法;
    Session.CLIENT_ACKNOWLEDGE:通过消息的acknowledge方法确认消息;

    Session.DUPS_ACKNOWLEDGE:会话迟钝确认消息的提交。如果JMS provider失败,出现重复消息,那么JMS必须把消息头的JMSRedeliverd字段设置为true。

4、Destination

消息被发送的目的地以及客户端接受消息的来源。目的地分为Queue和Topic两种。

5、Producer

由Session创建,用于往Destination发送消息。

6、Consumer

由Session创建,用于接收被发送到Destination的Message。

7、Listener
注册消息监听器,消息一旦到达,将会自动调用监听器的onMessage()方法。

【知识积累】(一)、消息中间件 - JMS

【知识积累】(一)、消息中间件 - JMS