JMS小记

前几天组长面试别人的时候问了些关于JMS的问题,后来顺便问了我一下。hmmm没接触过这技术当然是一脸懵逼,所以索性花了点时间上网搜了一下相关的内容然后自己总结一下。

什么是JMS?

JMS是Java消息中间件服务的应用程序接口,用于Java平台中应用程序之间的异步通信。到这里想提一下MQ,MQ是应用程序对应用程序之间的通信方法,是遵循AMQP协议的具体实现和产物。

如何消费JMS产生的消息?

JMS中消息的产生和消费是异步的。但是消息被消费的方式有2种。

1.同步的消息消费方式。

消息接收者调用receive方法接收信息,在接到消息之前(或者超时前)一直阻塞。

2.异步的消息消费方式。

消息接收者注册消息监听器,消息到达后调用监听器的onMessage方法。

消息消费模型

1.点对点模型

每个消息只有一个接收者,发送者和接收者没有依赖关系。接收者接收成功有反馈信息。

如果希望每个消息都被成功处理应该使用该模型。

2.发布/订阅模型

每个消息可以有多个接收者,有时间依赖,必须订阅之后才能消费消息。

因此订阅者必须要一直处于在线状态。

允许创建持久化订阅,使没有激活的订阅者也能收到消息。

JMS对象模型

一般一个JMS对象模型包括以下几个元素。

1.ConnectionFactory 

用于创建发送端和接收端之间连接的工厂类。针对不同的消息模型有 QueueConnectionFactory和TopicConnectionFactory,也可以在Tomcat的context.xml中配置然后通过JNDI来查找。

PS:JNDI是一个标准规范,类似JDBC,JMS等规范,为开发人员提供了查找和访问各种命名和目录服务的通用、统一接口。

2.Connection

发送端和接收端之间建立的连接,根据消息模型不同可以使用QueueConnection或者TopicConnection。用于创建Session。

3.Session

操作消息的接口。可以通过session创建生产者、消费者、消息等等。提供事务功能用于发送/接收多个消息。也分QueueSession和TopicSession。

4.Sender

由Sessoin创建,将消息发送到destination。根据消息模型不同可以使用QueueSender或者TopicPublisher。

5.Receiver

由Session创建,接收Destination发来的信息。根据消息模型不同可以使用QueueReceiver或者TopicSubscriber。可以通session的createDurableSubscriber方法来创建持久化的订阅者。

6.Destinatoin

消息生产者的发送目标或者消息接受者的消息来源。 实际上就是Queue、Topic的对象。

7.MessageListener

消息监听器。如果注册监听器,一旦消息达到就自动调用onMessage方法。


JMS提供五种不同的消息正文格式用于消息的发送以及接收。

1.StreamMessage -> 数据流消息

2.MapMessage -> 键值对消息

3.TextMessage -> 字符串消息

4.ObjectMessage -> 序列化对象消息

5.BytesMessage ->未解释字节数据流消息

你可能感兴趣的:(JMS小记)