路由模式:这种模式添加了一个路由键,生产者发布消息的时候添加路由键,消费者绑定队列到交换机时添加键值,这样就可以接收到需要接收的消息。这个模式和发布订阅模式差不多,只不过在发布的时候添加routing key,用户如果拥有这个key才能消费信息。
举个日志处理例子:系统需要针对日志做分析,首先所有的日志级别的日志都需要保存,其次error日志级别的日志需要单独做处理。这时就可以使用路由模式来处理了,声明交换机使用路由模式,每个日志级别的日志对应一个路由(error,info,warning)。声明一个保存日志队列用于接受所有日志,绑定交换机并绑定所有路由。声明第二个队列用于处理error级别日志,绑定交换机且只绑定error路由。以下是代码讲解。(先运行两个消费者,在运行生产者。如果没有提前将队列绑定到交换机,那么直接运行生产者的话,消息是不会发到任何队列里的)
生产者
1 | public class Sender |
消费者1
1 | public class Recver1 |
消费者2
1 | public class Recver2 |
测试结果
1 | 1、 |
总结:
- 两个队列消费者设置的路由不一样,接收到的消息就不一样。路由模式下,决定消息向队列推送的主要取决于路由,而不是交换机了。
- 该模式必须设置交换机,且声明路由模式:channel.exchangeDeclare(EXCHANGE_NAME, “direct”);