RabbitMQ的交换机类型共有四种,是根据其路由过程的不同而划分成的
分别是Direct Exchange(直连交换机), Fanout Exchange(扇型交换机), Topic Exchange(主题交换机)与 Headers Exchange(头交换机)
以下是四种交换机的路由图及详解、
Direct Exchange(直连交换机):将一个名为Q的消息队列与某个名为D的直连交换机通过值为R的路由键绑定在一起,当一个Msg和路由键R发送到直连交换机D上时,直连交换机D会把Msg根据路由键R分发到Q队列。这种模式类似于一对一
Fanout Exchange(扇型交换机):当一个Msg发送到扇形交换机F上时,则扇形交换机F会将消息分别发送给所有绑定到F上的消息队列。扇形交换机将消息路由给绑定到自身的所有消息队列,也就是说路由键在扇形交换机里没有作用,故消息队列绑定扇形交换机时,路由键可为空。这个模式类似于广播。
Topic Exchange(主题交换机):主题交换机是一种发布/订阅的模式,结合了直连交换机与扇形交换机的特点,消息队列与主题交换机的绑定也是通过路由键的。当一个Msg和路由键规则发送到一个主题交换机T时,T会根据路由键规则来筛选出符合规则的绑定到自身消息队列的路由键(可能是1个,也可能是N个,也可能是0个),根据符合的路由键,将消息发送到其对应的消息队列里。这个模式类似于多播,当消息的路由规则只匹配到一个路由键时,此时主题交换机可以看作是直连交换机,当路由规则匹配了主题交换机上所有绑定的队列的路由键时,此时主题交换机可以看作是扇形交换机
Headers Exchange(头交换机):头交换机类似与主题交换机,但是却和主题交换机有着很大的不同。主题交换机使用路由键来进行消息的路由,而头交换机使用消息属性来进行消息的分发,通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。在头交换机里有一个特别的参数”x-match”,当”x-match”的值为“any”时,只需要消息头的任意一个值匹配成功即可,
当”x-match”值为“all”时,要求消息头的所有值都需相等才可匹配成功。虽然至今没有遇到过头交换机,但是还是建议各位同学去了解一下。
以上如有问题,欢迎指正
下一篇:PHP中RabbitMQ之phpAmqplib实现(五)
原文地址:https://www.cnblogs.com/php-linux/p/11293881.html