routing模式对应的交换机类型是direct,和发布订阅模式的区别在于:routing模式下,可以指定一个routingkey,用于区分消息
生产者
消费者 A
//定义队列 channel.QueueDeclare(QUEUENAME, true, false, false); //定义交换机 channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false); //绑定队列到交换机 channel.QueueBind(QUEUENAME, TESTEXCHANGE, "INFO");消费者 B
//定义队列 channel.QueueDeclare(QUEUENAME, true, false, false); //定义交换机 channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false); //绑定队列到交换机 channel.QueueBind(QUEUENAME, TESTEXCHANGE, "ERROR");绑定成功后,发送消息,消费者A可以收到消息,消费者B无法收到消息。
如果遇到指定routingKey生产一条消息,结果 AB消费者都收到的情况。建议在RabbitMQ后台的交换机下看一下绑定的Queue是否重复绑定了多个routingKey.
topic通配符模式在通配符模式下,RabbitMQ使用模糊匹配来决定把消息推送给哪个生产者。通配符有两个符号来匹配routingKey
*匹配一个字符 如:*.qq.com 可匹配 1.qq.com
#匹配一个或者多个字符。 如:*.qq.com 可匹配 1.qq.com或者1111.qq.com
其他的操作基本和routing模式一样。
header模式header模式是把routingkey放到header中.取消掉了routingKey。并使用一个字典传递 K、V的方式来匹配。
比如同时要给用户发送邮件和短信,可直接通过header的键值对来匹配绑定的值,把消息传递给发短信和邮件的生产者.