https://www.sojson.com/blog/48.html

基于AMQP协议 (Advanced Message Queuing Protocol)

rabbitMq 是使用AMQP架构进行实现

AMQP 定义了消息交换中间件的一整套规则。
协议的基本设计原则:高效、异步、安全、跨平台 等

其定义的基本架构
exchange 交换器,客户端向exchange发送消息,同时由exchange路由到queue
queue 存储消息的对接
binding 定义交换器与queue的绑定关系

rabbitMq 的基本设计 - 图1
P-生产者 、 X-exchange 、 queue 、 C-customer

Rabbit 中实现的绑定策略

binding key 与 routing key

X与 Q 绑定一个binding key 。
X与Q一对多的关系(及一条消息会同时发送给多个queue)
生产者获消费者发送消息时,指定routing key,给到X进行路由

Exchange Types

RabbitMq 实现了AMQP的几种绑定关系类型,其中常用的四种 fanout、direct、topic、headers

  1. fanout

将发送到的消息发送到所有的绑定的queue,不考虑任何条件

  1. direct

将发送的消息,校验binding key 与 routing key 是否相等,相等的发送

  1. topic

通配
用句号点对key的内容进行分隔。 如routing key 可以是 xxx.yyy.zzz
同样binging key如此处理,同时binding key可以使用统配符
代表一个单词 .yyy.*
#代表统配连续的0-n个单词 #.zzz

  1. headers

headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。 在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。

其它设计

使用 erlang 语法开发,是一种通用的面向并发的编程语言 , 所以rabbit的并发性能非常好
IO 在linux下默认选型 epoll多路复用器
轻量级的,部署简单,只需erlang环境的支持

异步消息
支持分布式