一、Hello Word模式html
Hello Word模式他会发送数据到空字符的交换机,这种交换机很特殊,它容许咱们准确地指定消息应该去哪一个队列。须要在routing_key参数中指定队列名称。网站
二、Work Queues模式ui
Work Queues模式其实就是在Hello Word模式变成了多个消费者,不会消费同一条消息。.net
三、Publish/Subscribe模式(fanout模式)htm
Publish/Subscribe模式其实就是将队列绑定到交换机,数据进入交换机而后在决定进入哪一个队列,绑定2个就会进入2个队列,相似广播性质。此模式也就是Exchange模式中的fanout模式。blog
上图中,生产者(P)发送到Exchange(X)的全部消息都会路由到图中的两个Queue,并最终被两个消费者(C1与C2)消费。rabbitmq
四、Routing模式队列
Routing模式它会把消息路由到那些binding key与routing key彻底匹配的Queue中,此模式也就是Exchange模式中的direct模式。路由
以上图的配置为例,咱们以routingKey="error"发送消息到Exchange,则消息会路由到Queue1(amqp.gen-S9b…,这是由RabbitMQ自动生成的Queue名称)和Queue2(amqp.gen-Agl…)。若是咱们以routingKey="info"或routingKey="warning"来发送消息,则消息只会路由到Queue2。若是咱们以其余routingKey发送消息,则消息不会路由到这两个Queue中。文档
五、Topics模式
Topics模式与Routing模式比较相近,routing key为一个句点号“. ”分隔的字符串(咱们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),binding key与routing key同样也是句点号“. ”分隔的字符串。binding key中能够存在两种特殊字符“*”与“#”,用于作模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(能够是零个)。
以上图中的配置为例,routingKey=”quick.orange.rabbit”的消息会同时路由到Q1与Q2,routingKey=”lazy.orange.fox”的消息会路由到Q1与Q2,routingKey=”lazy.brown.fox”的消息会路由到Q2,routingKey=”lazy.pink.rabbit”的消息会路由到Q2(只会投递给Q2一次,虽然这个routingKey与Q2的两个bindingKey都匹配);routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的消息将会被丢弃,由于它们没有匹配任何bindingKey。
六、RPC模式
这个模式不多用,也很少作解释了,就是一个请求队列一个回调队列,具体参考官方网站或者其余博客吧。
交换机4种模式中还有一种模式没叙述,就是headers模式:
headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否彻底匹配Queue与Exchange绑定时指定的键值对;若是彻底匹配则消息会路由到该Queue,不然不会路由到该Queue。
fanout,direct,topicexchange的routingKey都须要要字符串形式的,而headers exchange则没有这个要求,由于键值对的值能够是任何类型 ,匹配有两种方式all和any。这两种方式是在接收端必需要用键值"x-mactch"来定义。all表明定义的多个键值对都要知足,而any则代码只要知足一个就能够了
参考文档:
http://www.rabbitmq.com/getstarted.html
https://www.cnblogs.com/Black-Cobra/p/8926244.html
https://www.2cto.com/kf/201807/764225.html
https://blog.csdn.net/qq_40673786/article/details/90344169