RabbitMq Exchange
RabbitMq Exchange负责Message和具体的Queue之间的路由关系,当rabbitMq接收到一个消息,首先是由Exchange处理,如果找不到对应的Exchange,则回调ConfirmCallback
,ack
返回false。稍微扩展一点,如果最终一个消息不能被路由到任何一个queue,则会回调ReturnCallback
。
四种Exchange类型
direct exchange
这种exchange会根据routingKey直接匹配对应的queue name,将Message和queue做一一对应,默认的exchange就是该类型。
fanout exchange
这种exchange会直接将message广播到所有的queue中去,不管你指定的routingKey是什么。
headers exchange
这种exchange同样会忽略routingKey,而是根据binding中的headers配置的key-value键值对来进行路由,而匹配规则有两种:
- x-match = all :表示所有的键值对都匹配才能接受到消息
- x-match = any :表示只要有键值对匹配就能接受到消息
topic exchange
这种exchange需要特定的routingKey,必须是小数点隔开的一系列标识符,而binding则可以使用通配符,比如*和#
。可以建立匹配规则为*.rabbit.*
的和queueA的binding,当routingKey符合该该binding的验证规则时,则可以将message发送到对应的queueA中。