SpringAMQP
今天我们将研究Spring AMQP。
SpringAMQP
Spring AMQP是基于AMQP的消息传递解决方案的Spring实现。
Spring AMQP为我们提供了一个"模板",作为发送和接收消息的高级抽象。
什么是AMQP?
在之前的文章中,我们已经讨论了一些JMS概念和示例。
在本文中,我们将讨论AMQP协议和Spring AMQP Messaging。
AMQP代表高级消息队列协议。
AMQP是用于实现MOM(面向消息的中间件)的开放标准协议。
为什么我们需要AMQP?
我们有JMS API来开发企业消息系统,但是为什么我们需要另一个消息标准。
JMS API的主要缺点或者局限性是互操作性,这意味着我们可以开发仅在基于Java的应用程序中工作的消息系统。
它不支持其他语言。
AMQP解决了JMS API问题。
AMQP的主要优点是它支持异构平台和消息传递代理之间的互操作性。
我们可以使用任何语言(Java,C++,C#,Ruby等)和任何操作系统来开发消息系统。
他们仍然可以通过使用基于AMQP的消息代理相互通信。
JMS和AMQP之间的区别
在本节中,我们将讨论JMS和AMQP协议之间的区别。
- 互通性
JMS应用程序可在任何OS环境中使用,但仅支持Java平台。
如果我们要使用JMS API开发以下系统架构,则所有这些系统都应仅使用Java语言开发。
但是,如果我们使用AMQP标准来开发相同的系统,则可以使用任何表示System-1(JAVA),System-2(C#),System-3(Ruby)和System-4(C++)的语言来开发这些系统。
。
JMS API仅特定于Java平台,但是AMQP支持许多技术。
- 讯息模型
正如我们已经讨论的那样,JMS API支持两种消息传递模型:P2P(对等)模型和PUB/SUB(发布者/订阅者)模型。
AMQP支持五种不同的消息传递模型(或者Exchange类型)
- 直接交换
- 扇出交换
- 主题交流
- 标头交换
- 系统交换
- 讯息结构
JMS消息分为三个部分:标头,属性和正文。
AMQP消息分为4个部分:标题,属性,正文和页脚。
- 讯息类型
JMS API supports 5 types of messages as part of the Body section, but AMQP supports only one type of message – Binary (bytes) message.
Spring AMQP如何工作?
Spring框架提供了Spring AMQP API,以将AMQP消息代理与Spring应用程序集成以开发企业消息系统。
在AMQP邮件系统中,Message Publisher将邮件发送到Exchange。
发布者不知道为此Exchange配置了哪个队列,以及与此队列关联的使用者。
在配置Exchange时,我们将通过指定一些路由键将其映射到一个或者多个队列。
AMQP消费者已连接到队列并使用某些路由密钥侦听消息。
当发布服务器向Exchange发送邮件时,Exchange将使用此路由密钥,并将这些邮件发送到关联的队列。
当队列接收消息时,关联的使用者将自动接收这些消息。
例如,我们通过遵循上述架构实现了我们的AMQP消息系统。
如果发布者发送的路由键为1的消息,则此消息将路由到Queue1,然后路由到Consumer1。
如果发布者发送的路由键为2的消息,则此消息将路由到Queue2,然后路由到Consumer2。
注意:最受欢迎的AMQP协议实现的消息代理或者JMS服务器是:
- Apache Active MQ服务器
- Spring Rabbit MQ服务器
Spring AMQP模块
Spring Framework提供了两组API来处理AMQP协议服务器。
SpringAMQP项目位于以下:
https://spring.io/projects/spring-amqp
- Spring RabbitMQ AMQP API
Spring RabbitMQ AMQP API用于通过Spring Rabbit MQ服务器实现消息传递应用程序。
此API在两个Spring模块中开发:
- spring-amqp:
它是AMQP协议实现的基础抽象。
- Spring兔子:
It is the RabbitMQ implementation.- Spring ActiveMQ AMQP API
该API用于通过Apache Active MQ服务器实现消息传递应用程序。
该API使用带有ActiveMQ API的Spring AMQP抽象模块:
- spring-amqp:
它是AMQP协议实现的基础抽象。
- activemq-spring:
It is the ActiveMQ implementation.
注意:
Spring AMQP和Spring RabbitMQ模块均来自Pivotal团队(Spring框架)。
RabbitMQ服务器也来自Pivotal团队。ActiveMQ Server来自Apache Software Foundation。
Apache ActiveMQ发布了一个支持Spring框架的API,该API是" activemq-spring"(不是来自Pivotal团队)。