什么是RabbitMQ

先来了解什么是AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。RabbitMQ是基于AMQP协议的一种实现,RabbitMQ服务端由Erlang语言编写,用于在分布式系统中提供消息储存和转发。本章将具体介绍一下RabbitMQ的概念已经相关原理架构。

RabbitMQ架构图

rabbit mq 架构设计 rabbitmq的架构_消息队列

里面涉及到几个名词
Producer
Consumer
Exchange
Queue
Channel
一、Producer
消息的生产者,负责生产消息并发送到消息队列中,供消费者消费。
二、Consumer
消费者,从队列中获取消息并消费。
三、Exchange
消息的路由器,分为四种类型,不通类型根据不同的规则和算法,将消息发送到不同的队列上。

Direct
直接交换器,工作方式类似于单播,Exchange会将消息发送完全匹配ROUTING_KEY的Queue

fanout
广播是式交换器,不管消息的ROUTING_KEY设置为什么,Exchange都会将消息转发给所有绑定的Queue。

topic
主题交换器,工作方式类似于组播,Exchange会将消息转发和ROUTING_KEY匹配模式相同的所有队列,比如,ROUTING_KEY为user.stock的Message会转发给绑定匹配模式为 * .stock,user.stock, * . * 和#.user.stock.#的队列。( * 表是匹配一个任意词组,#表示匹配0个或多个词组)

headers
消息体的header匹配(ignore)

四、Queue

消息队列,提供了FIFO(先进先出)的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。

设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash,数据丢失
设置为临时队列,queue中的数据在系统重启之后就会丢失
设置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除

五、Chanel
在图中并未展示出来,生产者的消息并不是直接发送给exchange,而是先与exchange建立一个连接(通道),通过这个连接传递给exchange,而这个连接就是chanel,是一个基于tcp协议的连接。

更多的可以参考更详细的配置