RabbitMQ的模型大概就是这样的:
producer --> exchange --> queue ---> consumer
发送者通过exchange发送消息,exchange根据策略丢到不同的queue里,然后consumer从queue中获取数据。这其中在文章可做的,就是exchange到queue的策略:丢到哪些queue里面去。
当前的RabbitMQ支持四种策略:
- direct
- fanout
- topic
- header
其中第四种header其实不太相关,先不用管。fanout就和它的名字一样,把消息传给所有连接的exchange中的queue。direct和topic会使用不同的策略,它还需要使用两个数据:发送者的routeKey和队列的bindingKey,只有routeKey和bindingKey相匹配,消息才会进入到相应的队列,区别在于: - direct模式下,要求routeKey与bindingKey相同,才算是匹配上了;
- topic模式下,要求routeKey与bindkingKey近照与另外一种规格的匹配。
topic模式下的匹配时,routeKey是一截一截的以“.”分隔开来的word(有点像域名那样),而bindingKey和routeKey类似,只是可以用*表示匹配一个word或者#匹配任意个word。
比如topic.可以匹配上topic.news与topic.goods,但是不能匹配topic.kinds.bad。因为只能匹配一个单词,而topic.#就能够匹配前面所与的三个词,甚至包括topic,因为它能够匹配0到任意个词。