RabbitMQ-direct直通模式
direct: 把Exchange上的消息发送到匹配routing key的队列中。
消费者队列绑定关键字到交换机上,发送者将数据根据关键字发送到交换机上,交换机根据关键字去遍历绑定到它上面的队列,将数据发送至指定关键字的队列。
在上图中,有两个队列绑定到direct类型的交换机“X”。第一个队列绑定关键字orange,第二个有2个绑定关键字,一个是black,另一个是green。在这种设置下,有orange绑定关键字的消息会被交换机发送到队列Q1。拥有black或green绑定关键字的消息将被发送到Q2。其它的所有消息将被丢弃。
对于同一个关键字绑定到多个队列的情况也是可以的,如图所示:
给一给交换机X和队列Q1添加绑定相同的关键字black。此时,direct交换机将和fanout表现的一样,广播消息到所有队列。关键字为balck的消息将被发送给Q1和Q2。
Direct模式下的消息是支持持久化的,当消费端不在线时,消息会存在对于的队列中(mq中交换机只是起到一个路由的功能,不存储消息,消息都是存储于队列中的),并不会丢失。消费端启动后到指定的队列上去取消息,会将该队列上所有的消息都取走。
代码例子参考另一篇文章RabbitMQ-fanout广播模式,只需要将交换机的类型修改为direct即可。
//声明交换机
CExchange exchange(exchange_name, "direct", true, false);
if (0 != mqClient.DeclareExchange(exchange, err))
{
return -1;
}