1. 回顾发布/订阅模式
- 在发布订阅模式中,exchange的类型设置为fanout, 所有提交到这个exchange的消息都会被推送到所有与之绑定的队列中
- 如果希望把消息推送到一部分与该exchange绑定的队列,就要使用路由
2. 路由
- 在生产者产生消息时,通过如下代码把它提交给exchange:
channel.basic_publish(exchange='logs', routing_key='', body=message)
- 我们通过以下代码把一个队列绑定到一个exchange上:
channel.queue_bind(exchange='logs', queue=queue_name, routing_key='')
- 可以看出,上面的两行代码有相容的参数就是routing_key
- 因此,只要提交消息时设置的routing_key和绑定队列时设置的routing_key一致,
- 这个消息就会被推送到这个队列上
- 在发布订阅模式中,exchange的类型被设置成fanout, 在这里,应该被设置成direct
3. 代码
3.1 publish.py
- 以下代码模拟了日志的产生,所谓的“日志”,就是通过参数输入的,比如执行:
python3 publish.py error "this is an error"
- 就会向队列中加入等级为error的一条日志,内容为"this is an error"
- 把日志等级作为routing_key,消费者就