SpringAMQP

时间:2020-02-23 14:35:43  来源:igfitidea点击:

今天我们将研究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团队)。