rabbitMQ - 2 - 核心概念

特殊的关键名词:
vhost:虚拟主机,一个broker里可以有多个vhost,用于不同用户的权限分离。默认guest用户的vhost是 根(\)。
Channel: 发送消息 和 接受消息 都是通过channel,封装了socket协议相关部分逻辑。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
routing key:用于exchange路由,见ExchangeType部分。
binding key:用于exchange路由,见ExchangeType部分。
ExchangeType:有fanout、direct、topic、headers 四种类型。
- fanout:把所有发送到该Exchange的消息路由到所有与它绑定的Queue中
-
direct: 把消息路由到那些binding key与routing key完全匹配的Queue中
image.png
上图中,如果ExchangeType=direct,那么只有producer1发送的消息会被customer1收到,而producer2发送的消息不会有任何队列能接收,将被丢弃。如果ExchangeType= fanout,那么cusumer1会收到producer1和producer2的消息,cusumer2会收到producer2的消息,因为该模式只管 exchange是否bind了队列,而不会管key。
-
topic: direct的升级版,支持句号(".")分割和模糊匹配(*匹配一个单词,#匹配0~N个单词)。
image.png
上图中,product1的消息会被queue1接收,product2的消息会被queue1接收。而queue2不会收到任何消息。
-
headers:headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
image.png
如果这里的arguments设置为了 a=b ,那么只有header里也有a=b的键值对时,才会匹配。