JMS小记

作者: 无聊夫斯基 | 来源:发表于2018-01-07 20:22 被阅读0次

    前几天组长面试别人的时候问了些关于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小记

          本文链接:https://www.haomeiwen.com/subject/wwpmnxtx.html