直接模式(Direct)
我们先看一下这张直接模式的流程图
我们可以看到一个消息的生产者发送了一条没有带交换器名称的信息,只带了一个条件【KEY】,那么这时RabbitMQ就会认为是采用直接模式发送信息
直接模式就是虽然消息依然经过了交换器,但这个交换器是不起作用的,这个消息会直接跟据条件【KEY】找到名为【KEY】的消息队列然后放入该队列
然而直接模式有一个问题就是只能点对点,只能选择向一个队列发送消息
一句话总结:在只需要将消息发给唯一一个节点时就使用这种模式
如果你想发送一条信息能被多个队列收取到该怎么做呢?那就要用到下面两种模式了
分列模式(Fanout)
先看一看分列模式的流程图
这次消息带了交换器的名称,就表明我这条消息要交给这个交换器处理了,要想使用分列模式得需要先把这个交换器设置为分类模式,创建的方法如下图所示,将Type属性设置为Fanout即可
下面这张图就是将三个队列绑定到这个交换器上,那么这个消息就可以只需发送一次就可以被所有的被绑定的队列收取了
一句话总结:在需要将消息一次发给多个队列时就使用这种模式
但好像这样有点死板,我想更加灵活的掌控一次消息被哪些队列收取,而不是只能靠建很多交换器绑定队列这种麻烦的办法实现业务
接下来就该可以说是加强版的分列模式登场了
主题模式(Topic)
先看一看流程图
可以看到队列也加了一个条件,仔细看一看被红线连接的两个消息的条件写的什么,把这三个对比一下
相信聪明的你已经猜出队列的这个条件#号代表的意思就是模糊匹配,只要是routing key以usa.开头的消息,不管后面再写什么,都会被binding key=usa.#的队列收取到
一句话总结:任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上,这就保证了可以更加灵活的运用RabbitMQ啦~
文章来源于网络。
感谢大家阅读,欢迎大家私信讨论。给大家推荐一个Java技术交流群:473984645里面会分享一些资深架构师录制的视频资料:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多!
推荐大家阅读:
Java高级架构学习资料分享+架构师成长之路
个人整理了更多资料以PDF文件的形式分享给大家,需要查阅的程序员朋友可以来免费领取。还有我的学习笔记PDF文件也免费分享给有需要朋友!