RabbitMQ 中的 Routing(直连)订阅模型 - Direct Exchange 是一种基于路由键(routing key)精确匹配的消息分发方式。在这个模型中,消息传递具有一定的选择性,生产者发布消息时会指定一个路由键,而队列在绑定到交换机时也会指定一个路由键或通配符。只有当发送消息时提供的路由键与队列绑定时使用的路由键完全匹配时,消息才会被投递到该队列。
具体工作流程如下:
-
创建 Direct 交换机:
生产者和消费者可以声明一个 Direct 类型的交换机,如direct_logs
。 -
绑定队列:
消费者将需要接收特定类型消息的队列绑定到 Direct 交换机上,并指定一个绑定键(binding key)。例如,假设我们有三个队列error_queue
、warning_queue
和info_queue
,分别用于处理错误、警告和普通信息级别的日志。这些队列可以分别绑定到交换机direct_logs
上,并使用对应的路由键error
、warning
和info
。 -
发布消息:
当生产者向交换机direct_logs
发布一条消息时,它会携带一个路由键。例如,如果发布一条路由键为warning
的消息,则消息会被转发至所有已绑定并使用路由键warning
的队列(在本例中即warning_queue
)。 -
消息投递:
直连交换机会检查每个绑定,只有当消息的路由键与某个队列的绑定键相匹配时,消息才会被投递到那个队列。不匹配的路由键则不会导致消息被任何队列接收。
这种模式适用于需要根据消息内容的不同属性精准分发给不同处理单元的情况,比如日志分类、订单状态变更通知等场景。