直接模式(Direct)

我们先看一下这张直接模式的流程图

我们可以看到一个消息的生产者发送了一条没有带交换器名称的信息,只带了一个条件【KEY】,那么这时RabbitMQ就会认为是采用直接模式发送信息

直接模式就是虽然消息依然经过了交换器,但这个交换器是不起作用的,这个消息会直接跟据条件【KEY】找到名为【KEY】的消息队列然后放入该队列

然而直接模式有一个问题就是只能点对点,只能选择向一个队列发送消息

一句话总结:在只需要将消息发给唯一一个节点时就使用这种模式

如果你想发送一条信息能被多个队列收取到该怎么做呢?那就要用到下面两种模式了

分列模式(Fanout)

先看一看分列模式的流程图

这次消息带了交换器的名称,就表明我这条消息要交给这个交换器处理了,要想使用分列模式得需要先把这个交换器设置为分类模式,创建的方法如下图所示,将Type属性设置为Fanout即可

下面这张图就是将三个队列绑定到这个交换器上,那么这个消息就可以只需发送一次就可以被所有的被绑定的队列收取了

一句话总结:在需要将消息一次发给多个队列时就使用这种模式

但好像这样有点死板,我想更加灵活的掌控一次消息被哪些队列收取,而不是只能靠建很多交换器绑定队列这种麻烦的办法实现业务

接下来就该可以说是加强版的分列模式登场了

主题模式(Topic)

先看一看流程图

可以看到队列也加了一个条件,仔细看一看被红线连接的两个消息的条件写的什么,把这三个对比一下

相信聪明的你已经猜出队列的这个条件#号代表的意思就是模糊匹配,只要是routing key以usa.开头的消息,不管后面再写什么,都会被binding key=usa.#的队列收取到

一句话总结:任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上,这就保证了可以更加灵活的运用RabbitMQ啦

来源:blog.csdn.net/z806899669/article/details/89063713

作者:MoLi