AMQ 可以提供可靠的异步消息传送,能够将分布式应用程序和组件集成在一起。在不同平台和操作系统上运行的应用可以通过连接到该服务来彼此进行交互。
AMQ 是一种基于Java的消息传送解决方案,它不仅实现了Java消息服务(JMS)开放标准,还添加了针对企业级应用的一些高级功能。此外, AMQ 还提供了大规模企业部署所需的互操作性、安全性、可伸缩性、可用性、易管理性以及其他功能。
企业消息传送系统使独立的分布式应用程序或应用程序组件可以通过消息进行交互。这些组件无论是在同一主机、同一网络上运行,还是通过 Internet 松散地连接在一起,均可使用消息传送来传递数据以协调各自的功能。
为了使大量组件能够同时交换消息,并支持高密度吞吐量,消息的发送就不能取决于消费者是否已做好接收消息的准备。如果某个消费者正忙或处于脱机状态,系统必须允许进行这样的操作:当该消费者准备就绪时再接收消息。这种去耦合的消息发送与接收称为“异步消息传送”。
异步消息传送模型非常适用于完成集成复杂系统的任务;对于此类系统,在执行操作的过程中让一个组件为另一个组件提供支持既不切实际,也不值得这样做。尽管异步消息传送放弃了同步系统所具有的某些控制功能,但大大提高了组件间相互作用的灵活性。它还增强了系统的稳定性,因为一个组件的故障并不会导致整个系统瘫痪。
企业应用程序系统一般都包括大量的分布式组件,这些组件在全天候的关键任务操作中交换数以万计的消息。要支持这样的系统,除了支持异步消息传送外,企业消息传送系统还必须满足以下要求:
可靠性,从一个组件向另一个组件传送的消息不能由于网络或系统故障而丢失。这就意味着,系统必须能够保证消息可靠地传送。
安全性,消息传送系统必须支持基本的安全功能:用户验证、消息及资源的访问授权和线上加密。
可伸缩性,消息传送系统必须能够在不降低系统性能或消息吞吐量的前提下容纳不断增长的负荷,即用户数量和消息数量的增加。随着业务和应用程序的扩展,这将成为一个很重要的要求。
可用性,消息传送系统的停机时间必须非常短。也就是说在发生故障时,系统具有足够的冗余以继续提供消息传送服务。
集中式 (MOM) 消息传送,Message Queue 采用集中式消息传送系统,如图1中所示。在此类系统中,每个消息传送组件只需与一个中央消息服务保持连接。组件通过定义完善的接口与消息服务进行交互。
点对点消息传送, 图中左侧所示为另一种系统,即点对点系统,在该系统中,每个消息传送组件均与所有其他组件保持连接。点对点系统可以实现快速、安全和可靠的传送,但是支持可靠性和安全性的代码必须保存在每一个组件中。消息的发送和接收紧密耦合,因而难以实现异步传送。随着组件被不断添加到系统中,连接的数量将成指数级增加,因此,系统的可伸缩性很差。在点对点系统中也很难实施集中式管理。
在集中式系统(企业首选消息传送方案)中,消息服务能够在组件间进行消息路由和传送,并负责可靠且安全地进行传送。因为这种系统中的组件间是松散耦合的,所以更容易实现异步消息传送。
随着消息传送组件被不断添加到系统中,连接的数量成线性增加,可以轻松地通过调整消息服务配置来适应。
图2 所示为集中式消息传送系统的基本体系结构。它包括消息发送者和消息接收者,它们通过公共的消息服务来交换消息。同一消息传送组件(或应用程序)中可以保存任意数量的消息发送者和消息接收者。
消息发送者使用消息服务编程 API 将消息发送至消息服务器。消息服务器进行消息路由并将消息传送至一个或多个消息目的地的服务器。接收者使用消息服务编程 API 从目的地服务器上接收消息。消息服务器负责保证将消息传送至所有相应的接收者。
就像日常生活中的邮局一样,尽管一封邮件上标注的是其最终收件人的地址,实际上却要通过邮局进行路由,并经由多个中转站后,才会到达收件人的邮箱。