RabbitMQ重要概念

Producer (生产者

消息的生产者,投递方

Consumer (消费者) :

消息的消费者

Broker

RabbitMQ 服务节点(单机情况中,就是代表RabbitMQ服务器)

Queue (队列) :

在RabbitMQ中Queue是存储消息数据的唯一形式

Binding (绑定) :

RabbitMQ中绑定(Binding)是交换机(exchange)将消息(message)路由给队列(queue)所需遵循的规则。如果要指示交换机“E”将消息路由给队列“Q”,那么“Q”就需要与“E”进行绑定。绑定操作需要定义一个可选的路由键(routing key)属性给某些类型的交换机。路由键的意义在于从发送给交换机的众多消息中选择出某些消息,将其路由给绑定的队列。
_

Exchange (交换机)

生产者将消息发送给交换器(交换机),再由交换器将消息路由导对应的队列中
交换机四种类型 : fanout,direct,topic,headers

fanout (扇形交换机) :

将发送到该类型交换机的消息(message)路由到所有的与该交换机绑定的队列中,如同一个”扇”状扩散给各个队列
图片.png
fanout类型的交换机会忽略RoutingKey的存在,将message直接”广播”到绑定的所有队列中

direct (直连交换机) :

根据消息携带的路由键(RoutingKey) 将消息投递到对应的队列中
图片.png

direct类型的交换机(exchange)是RabbitMQ Broker的默认类型,它有一个特别的属性对一些简单的应用来说是非常有用的,在使用这个类型的Exchange时,可以不必指定routing key的名字,在此类型下创建的Queue有一个默认的routing key,这个routing key一般同Queue同名.

Topic (主题交换机) :

topic类型交换机在RoutingKey 和 BindKey 匹配规则上更加的灵活. 同样是将消息路由到RoutingKey和 BindingKey 相匹配的队列中,但是匹配规则有如下的特点 :
规则1: RoutingKey 是一个使用点号. 的字符串 例如: “go.log.info” , “java.log.error”
规则2: BingingKey 也会一个使用点号 . 分割的字符串, 但是在 BindingKey 中可以使用两种特殊字符 和 # ,其中 ““ 用于匹配一个单词,”#”用于匹配多规格单词(零个或者多个单词)

图片.png
RoutingKey和BindingKey 是一种”模糊匹配” ,那么一个消息Message可能 会被发送到一个或者多个队列中
无法匹配的消息将会被丢弃或者返回者生产者

Headers (头交换机):

头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。在绑定队列和交换器时制定一组键值对,当发送消息到交换器时,RabbitMQ 会获取到该消息的 headers (也是一个键值对的形式〉 ,对比其中的键值对是否完全 匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由 到该队列 。 headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。

RoutingKey

RoutingKey (路由键) : 消息投递给交换器,通常会指定一个 RoutingKey ,通过这个路由键来明确消息的路由规则
RoutingKey 通常是生产者和消费者有协商一致的key策略,消费者就可以合法从生产者手中获取数据。这个RoutingKey主要当Exchange交换机模式为设定为direct和topic模式的时候使用,fanout模式不使用RoutingKey

参考

https://www.jianshu.com/p/179467f5cc85