查看原文
其他

【322期】面试官:RabbitMQ有哪些消息处理模式,分别的特点是什么


 题外推荐

 推荐一个“摸鱼程序员”聚集地

直接模式(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

END


【301期】面试官:dubbo为什么没有采用jdk的spi机制?

【302期】面试官:幂等性的接口该如何设计?

【303期】如何理解算法中的时间复杂度?

【304期】堆排序算法(图解详细流程)

【305期】面试官:Redis用过是吧?那你讲讲Redis都有哪些监控指标?

【306期】面试官:解决集群环境下定时任务多次执行的办法有哪些?

【307期】面试官:什么是NIO?NIO的原理是什么?

【308期】面试官:为什么kafka效率这么高?

【309期】阿里巴巴菜鸟网络——面试经历记录

【310期】面试官:MySQL主备、主从、读写分离你了解多少?


与其在网上拼命找题? 不如马上关注我们~

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存