你真正了解过Java消息服务应用程序接口(JMS)吗?

Posted king哥Java架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真正了解过Java消息服务应用程序接口(JMS)吗?相关的知识,希望对你有一定的参考价值。

了解JMS规范

Java消息服务(Java Message Service,JMS)应用程序接口,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。JMS是一个与具体平台无关的API,绝大多数面向消息中间件提供商都对JMS提供支持。

JMS的目标包括以下4点。

  • 包含实现复杂企业应用所需要的功能特性。

  • 定义了企业消息产品概念和功能的一组通用集合。

  • 最小化这些Java程序员必须学习以使用企业消息产品的概念集合。

  • 最大化消息应用的可移植性。

JMS消息风格

JMS支持企业消息产品提供两种主要的消息风格。

  • 点对点:如下图所示,点对点风格允许一个客户端通过一个叫“消息队列”的中间抽象发送一个消息给另一个客户端。发送消息的客户端将一个消息发送到指定的队列中,接收消息的客户端从这个队列中抽取消息。

  • 发布/订阅:如下图2所示,发布/订阅风格允许一个客户端通过一个叫“主题”的中间抽象发送一个消息给多个客户端。发送消息的客户端将一个消息发布到指定的主题中,然后这个消息将被投递到所有订阅了这个主题的客户端。
    在这里插入图片描述
    在这里插入图片描述

JMS接口

由于历史的原因,JMS提供了3组用于发送和接收消息的接口。

  • JMS 1.0定义了两个特定领域相关的API,一个用于点对点的消息处理,另一个用于发布/订阅的消息处理。尽管由于向后兼容,这些接口一直被保留在JMS中,但是在以后的API中应该考虑被废弃掉。

  • JMS 1.1引入了一组新的统一的API,可以同时用于点对点和发布/订阅消息模式。这也被称作标准API。

  • JMS 2.0引入了一组简化API,它拥有标准API的全部特性,同时接口更少、使用更方便。以上每组API提供一组不同的接口集合,用于连接到JMS提供者、发送和接收消息。因此,它们共享一组代表消息、消息目的地和其他各方面功能特性的通用接口。

下面是使用标准API来发送消息的例子。

@Resource(lookup = "jms/connectionFactory ")
ConnectionFactory connectionFactory;
@Resource(lookup="jms/inboundQueue")
Queue inboundQueue;
public void sendMessageOld (String payload) throws JMSException{
try (Connection connection = connectionFactory.createConnection()) {
Session session = connection.createSession();
MessageProducer messageProducer =
session.createProducer(inboundQueue);
TextMessage textMessage =
session.createTextMessage(payload);
messageProducer.send(textMessage);
}
}

下面是使用简化API来发送消息的例子。

@Resource(lookup = "jms/connectionFactory")
ConnectionFactory connectionFactory;
@Resource(lookup="jms/inboundQueue")
Queue inboundQueue;
public void sendMessageNew (String payload) {
try (MessagingContext context = connectionFactory.createMessagingContext();){
context.send(inboundQueue,payload);
}
}

所有的接口都在javax.jms包下。

写在最后

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
在这里插入图片描述

码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!

以上是关于你真正了解过Java消息服务应用程序接口(JMS)吗?的主要内容,如果未能解决你的问题,请参考以下文章

jms和activemq

JMS(Java消息服务)入门教程

消息服务-JMS

Java消息服务-JMS

如何在 ActiveMQ 中通过 Stomp/JSON 使用 JMS 消息转换

activemq入门实例