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实体