RabbitMQ运行流程
-
Connection(链接)和Channel(信道)
Connection 是由Producer(生产者)和Consumer(消费者)建立在Message Broker(RabbitMQ服务)的物理节点上的TPC链接。
Channel 是基于Connection链接至Virtual Host(虚拟机)或者Queue(队列)上,客户端可以通过Channel向Exchange发送消息或者从Queue接受消息。
Channel使用TCP的多路复用避免了重复链接的开销。
-
Virtual Host(虚拟主机)
Virtual Host 提供逻辑分组和资源分离。物理资源的分离不是虚拟主机的目标,应将其视为实现细节。 每个Virtual Hos下可以有多个Exchange和Queue。
我们可以把Virtual Host理解为mysql中的database,每个Virtual Host都可以进行单独的权限管理和逻辑操作。
-
Exchange(交换机)
Exchange可以绑定多个Queue也可以同时绑定其他的Exchange。接收客户端的消息,然后通过绑定的Routing(路由)规则,将消息分发至符合的Queue或Exchange中。
-
Exchange(交换机)路由规则
1. Direct路由
Direct模式下Exchange将生产者投递消息中所携带的Router Key和Queue中的Router Key进行比较,如果完全匹配,就会将这条消息投递到匹配的Queue中。
2. Fanout路由
Fanout模式下会忽略Routing Key,当Exchange收到生产者投递的消息后,会把消息投递到与自己绑定的所有Queue中。
3. Topic路由
Topic模式下会匹配Routing Key,Exchage会根据 #
和 *
进行Routing Key的匹配。
#
表示0个或多个关键词, *
表示1个关键词。(关键词非单个字母)
注意,在Direct和Topic模式下,如果Exchange没有匹配到任何Queue,该条消息将被丢弃。
Routing(路由键)
Exchange和Queue绑定可设置Routing Key,Prodicer向Exchange投递消息可设置Routing Key。
在Directt和Topic 路由模式下,Exchange会根据消息的Routing Key匹配对应的Queue进行投递。