一架梯子,一头程序猿,仰望星空!
RabbitMQ教程 > 内容正文

RabbitMQ工作模式 - 路由模式(Direct 模式)


RabbitMQ路由模式大体上跟发布订阅模式一样,区别在于发布订阅模式将消息转发给所有绑定的队列,而路由模式将消息转发给那个队列是根据路由匹配情况决定的。

从具体编码角度看,路由模式跟发布订阅模式的区别就是使用的交换机(Exchange)类型不一样,路由模式使用的是Direct类型

架构图

Direct模式
说明:

  • P 代表生产者 , C1、C2 代表消费者,红色代表队列,X 代表交换机。
  • 交换机类型为direct
  • direct交换机转发消息逻辑:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行比较,如果相等,则发送到该Binding对应的Queue中。

例如上图:
队列Q1的routing key=orange,队列Q2的routing key=black和green,发送消息的时候,如果消息的routing key = orange,则转发至Q1队列,消息的routing key = black和green则转发至Q2队列。

应用场景

路由模式是在发布订阅模式的基础上进行了扩展,因此应用场景跟发布订阅模式类似,区别是允许设置消息订阅的条件。

例如:
某电商网站,有华东、华南、华北、西南四个仓库,每个仓库部署了一套仓储系统,用户购物下单后,由最近的仓库负责发货。

用户下单后产生下单消息,我们希望将消息转发至对应的地区的仓储系统处理,可以使用路由模式。

四个仓储系统的发货队列绑定的routing key如下:

  • 华东 = east
  • 华北 = north
  • 华南 = south
  • 西南 = west

用户下单后计算用户地址属于哪个地区,算出routing key,然后发送下单消息的时候携带routing key即可,RabbitMQ direct交换机会转发至对应的队列。


推荐教程