JMS 是 Java 面向消息的中间件 (MOM) 的实现,并且是用于在 MQ(消息队列)服务器中发送和接收消息的 DeFacto 标准。 MQ 服务器充当消息发送方和接收方之间的中间人;这是在消息队列的帮助下完成的。
Spring JMS 可以有效地用于建立应用程序之间的通信。可以开发一个面向消息的中间件,通常称为 MQ 服务器,以建立通信。消息队列或 MQ 服务器的主要好处是它支持松散耦合的异步应用程序集成。
假设,在一个不同的系统中,运行在不同机器上的应用程序需要通信/我们有什么选择?当然,我们可以使用 SOAP 或 REST Web 服务,但我们还有其他选择吗?毫无疑问,Web 服务是一个可行的选择,但在许多情况下,它可能不可用甚至无法使用。在这种情况下,我们可以使用 JMS 并通过实现 MQ 服务器将我们的消息放入消息队列中。想要发送消息的应用程序将消息移交给 MQ 传输。然后它在向发送者确认任何回执之前立即将消息写入磁盘。在消息交换期间,协议确保消息被传递并且没有消息丢失。
消息传递技术
有两种主要的消息传递模型:点对点和发布者-订阅者。 MQ 服务器保留了一个队列和主题列表,它们分别遵循这两种模型。在这两者中,MQ 服务器模型使应用程序能够连接并发送和接收消息。
队列遵循点对点消息交换模型。当生产者发送消息时,它会被放入服务器维护的队列中。消息被传递给作为下一个消费者立即连接的那个。发送者和接收者是预定义的和静态的。
另一方面,主题是发布者-订阅者消息模型的实现。这里的想法更加通用,因为任意数量的客户端都可以订阅主题内的消息。因此,当发布特定主题的消息时,它会传递给所有订阅该主题的客户端。这种技术更具动态性,因为可以在运行时更改指定的发布者订阅者角色。
JMS的关键组件如下:
JMS Provider:它是一个提供消息代理服务的MOM实现。 此外,它还提供了管理和控制所需的其他功能,这些功能对于功能齐全的消息传递产品(ActiveMQ、IBM MQ 等)是必不可少的。
JMS 客户端:JMS 客户端是接收和发送消息的应用程序。
JMS 生产者或发布者:它表示两种类型的 JMS 客户端,它们使用消息队列或主题发送消息,如上所述。
JMS 消费者或订阅者:它表示两种类型的 JMS 客户端,它们使用消息队列或主题接收消息,如上所述。
JMS 应用程序:托管一个 JMS 提供者和许多 JMS 客户端的 JMS 应用程序。
ActiveMQ 服务器
有许多可用的 MQ 服务器实现,例如 IBM MQ、RabbitMQ、Apache ActiveMQ 等。 在这里,我们将主要关注 ActiveMQ,因为它很流行、开源、免费并且是用 Java 编写的。 ActiveMQ 支持许多跨语言客户端和协议,例如 C、C++、C#、Ruby、Perl、Python、PHP,当然还有 Java。 ActiveMQ 可以很容易地嵌入到 Spring 应用程序中,并且 Spring BOOT 支持为它提供了一个现成的启动器。
它是如何工作的?
生产者连接到 MQ 服务器并开始向队列或主题发送消息。 消费者连接到服务器并开始从队列或感兴趣的主题接收消息。 从使用 API 的角度来看,它们都是相同的。 从 JMS 1.1 开始,API 已经统一,在处理队列或主题时没有区别。