今天我们将关注SpringAMQP。
SpringAMQP
是基于AMQP的消息传递解决方案的Spring实现。为我们提供了一个用于发送和接收消息的高级抽象模板。在这个SpringAMQP中,我们将研究以下主题。辅导的。
- 什么是AMQP?
- 为什么我们需要AMQP?
- JMS和AMQP的区别
- Spring AMQP是如何工作的?
- SpringAMQP模块
什么是AMQP?
我们已经讨论过一些JMS系统我以前的文章中的概念和例子。在这篇文章中,我们将讨论AMQP协议和消息传递。
AMQP代表高级消息队列协议。AMQP是一种用于实现MOMs(面向消息的中间件)的开放标准协议。
为什么我们需要AMQP?
我们有jmsapi来开发企业消息传递系统,但是为什么我们需要另一个消息传递标准。
jmsapi的主要缺点或限制是互操作性,这意味着我们可以开发只在基于Java的应用程序中工作的消息传递系统。它不支持其他语言。
AMQP解决了jmsapi问题。AMQP的主要优点是它支持异构平台和消息传递代理之间的互操作性。我们可以开发我们的任何消息(java,C++,C语言,Ruby etc.)和任何操作系统的消息系统,但是它们仍然可以使用基于AMQP的消息代理来进行通信。
JMS和AMQP的区别
在本节中,我们将讨论JMS和AMQP协议之间的区别。
- 互操作性
- 消息传递模型
- 直接交换
- 扇形分叉交换
- 话题交流
- 邮件头交换
- 系统交换
- 消息结构
- 消息类型
JMS应用程序可以在任何操作系统环境下工作,但它只支持Java平台。如果我们想用jmsapi开发下面的系统架构,那么所有这些系统都应该只使用Java语言开发。
但是如果我们使用AMQP标准来开发同一系统,那么我们可以用任何系统语言来开发这些系统,这些系统是指系统1(java)、Stult-2(C×)、Stule-3(Ruby)和Stuler-4(C++)。
jmsapi只针对Java平台,但AMQP支持许多技术。
正如我们已经讨论过的,jmsapi支持两种消息传递模型:P2P(Peer-to-Peer)模型和PUB/SUB(Publisher/Subscriber)模型。
AMQP支持五种不同的消息传递模型(或交换类型)
JMS消息分为3个部分:头、属性和正文。AMQP消息分为4个部分:页眉、属性、正文和页脚。
jmsapi支持5种类型的消息作为Body部分的一部分,但是AMQP只支持一种类型的消息–;二进制(字节)消息。
Spring AMQP是如何工作的?
Spring框架提供api来集成AMQP消息代理和Spring应用程序,以开发企业消息传递系统。
在AMQP消息传递系统中,消息发布者向Exchange发送消息。发布者不知道哪个队列配置给这个交换,哪个使用者与这个队列关联。
在配置Exchange时,我们将通过指定一些路由键将其映射到一个或多个队列。
AMQP使用者连接到队列,并使用某个路由密钥侦听消息。
当发布服务器向Exchange发送消息时,Exchange将使用此路由密钥并将这些消息发送到关联的队列。当队列接收到消息时,关联的使用者将自动接收这些消息。
我们用上面的AMQP架构实现了我们的AMQP消息传递系统。
如果Publisher发送路由键为1的消息,则该消息将被路由到Queue1,然后路由到Consumer1。
如果发布服务器发送路由键为2的消息,则此消息将路由到队列2,然后路由到消费者2。
注:最流行的AMQP协议实现的消息代理或JMS服务器有:
- 阿帕奇活动MQ服务器
- Spring Rabbit MQ服务器
SpringAMQP模块
Spring框架提供了两组api来处理AMQP协议服务器。Spring AMQP项目位于以下网站:
https://spring.io/projects/spring-amqp
- SpringRabbitMQ AMQP API
- Springamqp:
- 春兔:
- SpringActiveMQ AMQP API
- Springamqp:
- activemqSpring:
springrabbitmqamqpapi用于使用springrabbitmq服务器实现消息传递应用程序。此API在两个Spring模块中开发:
它是AMQP协议实现的基础抽象。
它是RabbitMQ实现。
此API用于使用阿帕奇ActiveMQ服务器实现消息传递应用程序。此API使用Spring AMQP抽象模块和ActiveMQ API:
它是AMQP协议实现的基础抽象。
它是ActiveMQ实现。
注:
- 和springrabbitmq模块都来自Pivotal团队(springframework)。RabbitMQ服务器也来自Pivotal团队。
- ActiveMQ服务器来自阿帕奇软件基金会。发布了一个API来支持Spring框架
activemq-spring
(It’s not from Pivotal Team).
这就是消息传递的全部内容。
进一步阅读:春兔MQ,阿帕奇 ActiveMQ