Introduction to RabbitMQ


title: Introduction to RabbitMQ tags: [“RabbitMQ”, ” 中间件”,“Message Middleware”] date: 2022-05-28 draft: false

RabbitMQ作用

Asynchronous处理、应用解耦、Traffic Control

概述

1、大多应用中,可通过MessageService中间件来提升系统Asynchronous通信、扩展解耦能力

2、MessageService中两个重要概念:

MessageProxy(message broker)目的地(destination) 当消息发送者发送 消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。

3、Message Queue主要有两种形式的目的地

​ 3.1、Queue(queue):点对点Message通信(point-to-point)

​ 3.2、主题(topic):Publish(publish)/订阅(subscribe)Message通信

4、点对点式:

​ 4.1、Message发送者发送Message,MessageProxy将其放入一个Queue中,Message接收者从Queue中获 取Message内容,Message读取后被移出Queue

​ 4.2、Message只有唯一的发送者和接受者,但并不是说只能有一个接收者

5、Publish订阅式:

​ 发送者(Publish者)发送Message到主题,多个接收者(订阅者)监听(订阅)这个 主题,那么就会在Message到达时同时收到Message

6、JMS(Java Message Service)JAVAMessageService:

​ 基于JVMMessageProxy的规范。ActiveMQ、HornetMQ是JMSImplementation

7、AMQP(Advanced Message Queuing Protocol)

​ 7.1、高级Message Queue协议,也是一个MessageProxy的规范,兼容JMS

​ 7.2、RabbitMQ是AMQP的Implementation

8、Spring支持

​ 8.1、spring-jms提供了对JMS的支持

​ 8.2、spring-rabbit提供了对AMQP的支持

​ 8.3、需要ConnectionFactory的Implementation来连接MessageProxy

​ 8.4、提供JmsTemplate、RabbitTemplate来发送Message

​ 8.5、@JmsListener(JMS)、@RabbitListener(AMQP)注解在Method上监听Message ProxyPublish的Message

​ 8.6、@EnableJms、@EnableRabbit开启支持

9、Spring Boot自动Configuration

​ 9.1、JmsAutoConfiguration

​ 9.2、RabbitAutoConfiguration

10、市面的MQ产品

​ ActiveMQ、RabbitMQ、RocketMQ、Kafk

RabbitMQ概念

RabbitMQ是一个由erlangDevelopment的AMQP(Advanved Message Queue Protocol)的开源Implementation

核心概念

Message

Message,Message是不具名的,它由Message头和Message体组成。Message体是不透明的,而Message头则由一系列的可选属性组成, 这些属性包括routing-key(路由键)、priority(相对于其他Message的优先权)、delivery-mode(指出该Message可 能需要持久性Storage)等。

Publisher

Message的生产者,也是一个向交换器PublishMessage的客户端应用程序。

Exchange

交换器,用来接收生产者发送的Message并将这些Message路由给Server中的Queue。 Exchange有4种Type:direct(默认),fanout, topic, 和headers,不同Type的Exchange转发Message的策略有所区别

Queue

Message Queue,用来保存Message直到发送给消费者。它是Message的Container,也是Message的终点。一个Message可投入一个或多个Queue。Message一直 在Queue里面,等待消费者连接到这个Queue将其取走。

Binding

绑定,用于Message Queue和交换器之间的关联。一个绑定就是基于路由键将交换器和Message Queue连接起来的路由规则,所以可以将交 换器理解成一个由绑定构成的路由表。 Exchange 和Queue的绑定可以是多对多的关系。

Connection

网络连接,比如一个TCP连接。

Channel

信道,多路复用连接中的一条独立的双向Data流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP Command都是通过信道 发出去的,不管是PublishMessage、订阅Queue还是接收Message,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都 是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer

Message的消费者,表示一个从Message Queue中取得Message的客户端应用程序。

Virtual Host

虚拟主机,表示一批交换器、Message Queue和相关对象。虚拟主机是共享相同的身份认证和加 密环境的独立Server域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ Server,拥 有自己的Queue、交换器、绑定和PermissionsMechanism。vhost 是 AMQP 概念的Basic,必须在连接时 指定,RabbitMQ 默认的 vhost 是 /。

Broker

表示Message QueueServer实体