RabbitMQ 可以通过 Direct 交换机实现消息的路由。
工作原理是:
- 生产者将消息发送到 Direct 交换机,并指定routing key。
- 与交换机绑定的队列,会指定一个binding key。
- 如果routing key与binding key匹配,消息会被路由到该队列。
- 队列的消费者最终消费到消息。
- 通过匹配routing key与binding key,实现消息路由到指定队列的效果。
示例代码:
生产者:
// 发送消息到Direct Exchange,routing key为"info"
channel.basicPublish("direct_exchange", "info", null, message.getBytes());
消费者1:
// 队列1绑定到Direct Exchange,binding key为"info"
channel.queueBind("queue1", "direct_exchange", "info");
// 消费队列1中的消息
channel.basicConsume("queue1", true, "consumer1");
消费者2:
// 队列2绑定到Direct Exchange,binding key为"warning"
channel.queueBind("queue2", "direct_exchange", "warning");
// 消费队列2中的消息
channel.basicConsume("queue2", true, "consumer2");
- 生产者发送消息到 direct_exchange 交换机,routing key 为 info。
- queue1 的 binding key 为 info,与 routing key 匹配,消息路由到 queue1。
- 消费者1 消费 queue1 中的消息。
- queue2 的 binding key 为 warning,与 routing key 不匹配,消息不路由到 queue2。
- 消费者2 不消费任何消息。
所以总结来说,RabbitMQ 通过 Direct 交换机的路由功能,实现了消息路由的效果。这需要我们在生产者将消息发送到 Direct 交换机时指定合适的 routing key,同时在定义队列与交换机绑定时指定对应的 binding key。只有当 keys 匹配时,消息才会被路由到队列。