RabbitMQ运行流程

RabbitMQ运行流程-LMLPHP

  • Connection(链接)和Channel(信道)

Connection 是由Producer(生产者)和Consumer(消费者)建立在Message Broker(RabbitMQ服务)的物理节点上的TPC链接。

Channel 是基于Connection链接至Virtual Host(虚拟机)或者Queue(队列)上,客户端可以通过ChannelExchange发送消息或者从Queue接受消息。

Channel使用TCP的多路复用避免了重复链接的开销。

  • Virtual Host(虚拟主机)

Virtual Host 提供逻辑分组和资源分离。物理资源的分离不是虚拟主机的目标,应将其视为实现细节。 每个Virtual Hos下可以有多个ExchangeQueue

我们可以把Virtual Host理解为mysql中的database,每个Virtual Host都可以进行单独的权限管理和逻辑操作。

  • Exchange(交换机)

Exchange可以绑定多个Queue也可以同时绑定其他的Exchange。接收客户端的消息,然后通过绑定的Routing(路由)规则,将消息分发至符合的QueueExchange中。

  • Exchange(交换机)路由规则

1. Direct路由

Direct模式下Exchange将生产者投递消息中所携带的Router KeyQueue中的Router Key进行比较,如果完全匹配,就会将这条消息投递到匹配的Queue中。 RabbitMQ运行流程-LMLPHP

2. Fanout路由

Fanout模式下会忽略Routing Key,当Exchange收到生产者投递的消息后,会把消息投递到与自己绑定的所有Queue中。

RabbitMQ运行流程-LMLPHP

3. Topic路由

Topic模式下会匹配Routing KeyExchage会根据 #* 进行Routing Key的匹配。

# 表示0个或多个关键词, * 表示1个关键词。(关键词非单个字母) RabbitMQ运行流程-LMLPHP

注意,在DirectTopic模式下,如果Exchange没有匹配到任何Queue,该条消息将被丢弃。

Routing(路由键)

ExchangeQueue绑定可设置Routing KeyProdicerExchange投递消息可设置Routing Key

DirecttTopic 路由模式下,Exchange会根据消息的Routing Key匹配对应的Queue进行投递。

07-19 13:24