RabbitMQ的消息模式
前言
交换机(Exchange)为rabbitmq
独特的概念,用到的最常见的是4中类型:
- Direct: 先匹配, 再投送。即在绑定时设定一个routing_key, 消息的routing_key匹配时, 才会被交换器投送到绑定的队列中去. 交换机跟队列必须是精确的对应关系,这种最为简单。
- Topic: 转发消息主要是根据通配符。在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息 这种可以认为是Direct 的灵活版
- Headers: 也是根据规则匹配, 相较于 direct 和 topic 固定地使用 routingkey , headers则是一个自定义匹配规则的类型, 在队列与交换器绑定时会设定一组键值对规则,消息中也包括一组键值对( headers属性),当这些键值对有一对或全部匹配时,消息被投送到对应队列
- Fanout : 消息广播模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routingkey会被忽略
案例
topic
集群环境样例,同队列
发送端:topic=a.topic
接收端A: queue_a_1 routingKey=a.topic.routing
接收端B: queue_a_1 routingKey=a.topic.routing
发送端发送数据:C
接收端A、B: queue_a_1 任意端收到 C
集群环境样例,不同队列
发送端:topic=a.topic
接收端A: queue_a_1 routingKey=a.topic.routing
接收端B: queue_a_1 routingKey=a.topic.routing
接收端C: queue_a_2 routingKey=a.topic.routing
发送端发送数据:C
接收端A、B: queue_a_1 任意端收到 C
接收端C: queue_a_2 收到 C
集群环境样例,不同队列2
发送端:topic=a.topic
接收端A: queue_a_1 routingKey=a.topic.routing
接收端B: queue_a_1 routingKey=a.topic.routing
接收端C: queue_a_2 routingKey=a.topic.routing
接收端D: queue_a_2 routingKey=a.topic.#
接收端E: queue_a_2 routingKey=a.topic.#
发送端发送数据:C
接收端A、B: queue_a_1 任意端收到 C
接收端C、D、E: queue_a_2 任意端收到 C