第 20 章 Messaging

20.1. 介绍

20.1.1. HornetQ

HornetQ 是红帽开发的多协议的异步消息系统。HornetQ 提供带有自动客户失效切换的高可用性(HA),保证了在服务器发生故障时消息的可靠性。HornetQ 也支持灵活的群集方案以平衡消息负载。
HornetQ 是 JBoss EAP 6 的 JMS 供应商,它被配置为 Messaging Subsystem

20.1.2. 关于 Java 消息服务(Java Messaging Service,JMS)

消息系统允许您将多种系统用更好的可靠性松散地耦合在一起。Java Messaging Service (JMS) 供应商使用事务系统来提交或回滚原子的修改。不像基于 Remote Procedure Call (RPC) 模式的系统,消息系统主要使用异步的消息传递模式,在请求和响应间没有紧密的关系。多数消息系统也支持请求-响应模式,但这不是消息系统的主要功能。
消息系统将消息的发送者和消费者分离。发送者和消费者是完全独立的,彼此完全不知晓对方。这允许您创建灵活的、松耦合的系统。通常,大型的企业使用消息系统来实现消息总线,将多种系统松散地耦合在一起。消息总线通常组成 Enterprise Service Bus (ESB) 的核心。使用消息总线来分离不同的系统允许系统更容易成长和适应。它也提供了增加系统、减少旧系统更大的灵活性,因为它们之间的依赖性较低。

20.1.3. 支持的消息风格

HornetQ 支持下列消息风格:
消息队列模式
消息队列模式涉及发送消息到队列里。消息位于队列后,它通常会被持久化以保证递送。一旦消息已经在队列里移动,消息系统会将其递送到某个消息消费者。进行处理后,消息消费者会确认递送。
当和点对点消息系统一起使用时,消息队列模式允许一个队列对应多个消费者,但每个消息只能被单个消费者接收。
发布-订阅模式
发布-订阅(Publish-Subscribe)模式允许多个发送者发送消息到服务器上的单个实体。这个实体通常被称为“主题(Topic)”。每个主题都可被多个消费者使用,称为“订阅(subscription)”。
每个订阅都接收发送到这个主题的每条消息的备份。这和消息队列模式不同,每条消息只能由单个消费者消费。
持久性的订阅保持发送到主题的每个消息的备份,直至订阅者消费这些消息。在服务器重启时这些备份也会保留。非持久性的订阅则和创建它们的连接持续的时间一致。