在上一篇博客《RabbitMQ入门:发布/订阅(Publish/Subscribe)》中,我们认识了fanout类型的exchange,它是一种通过广播方式发送消息的路由器,所有和exchange建立的绑定关系的队列都会接收到消息。但是有一些场景只需要订阅到一部分消息,这个时候就不能使用fanout 类型的exchange了,这个就引出来今天的“猪脚”--Direct Exchange,通过Routing Key来决定需要将消息发送到哪个或者哪些队列中。
接下来请收看详细内容:
- Direct Exchange(直接路由器)
- 多重绑定
- 代码实例
一、Direct Exchange(直接路由器)
在上文中介绍exchange的时候,对direct exchange进行了简单介绍,它是一种完全按照routing key(路由关键字)进行投递的:当消息中的routing key和队列中的binding key完全匹配时,才进行会将消息投递到该队列中。这里提到了一个routing key和binding key(绑定关键字),是什么东东?
- routing key:
在发送消息的时候,basicPublish的第二个参数就是routing key,由于上次是fanout 类型的exchange 进行广播方式投递,这个字段不会影响投递结果,因此我们这里就传入了“”,但是在direct 类型的exchange中我们就不能传入""了,需要指定具体的关键字。
- binding key:
我们在前文中建立绑定关系的时候,queueBind的第三个参数就是绑定关键字
我们声明direact exchange的时候使用:
二、多重绑定
多个队列以相同的绑定键绑定到同一个路由器的情况,我们称之为多重绑定。
工作模型为(P代表生产者,X代表路由器,红色的Q代表队列,C代表消费者):