spring|Java:Spring中的JMS入门

spring|Java:Spring中的JMS入门

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 支持为它提供了一个现成的启动器 。
【spring|Java:Spring中的JMS入门】它是如何工作的?
生产者连接到 MQ 服务器并开始向队列或主题发送消息 。消费者连接到服务器并开始从队列或感兴趣的主题接收消息 。从使用 API 的角度来看 , 它们都是相同的 。从 JMS 1.1 开始 , API 已经统一 , 在处理队列或主题时没有区别 。