工作模式
1. 简单队列模式(simple queue)
只包含一个生产者和一个消费者 生产者将消息发送到队列中
消费者从队列中接收消息
2. 工作队列模式(work Queues)
一个生产者对应多个消费者,一条消息只被一个消费者进行消费
工作队列有轮询分发和公平分发两种模式
2.1平均分配
公平分配,每次只给一个消费者分配一个
ch.Qos(1, 0, false)
3. 发布-订阅模式(Publish/SubScribe)
- 一个生产者,多个消费者
- 每个消费者都有自己的消息队列,分别绑定到不同的队列上
- 生产者没有把消息发送到队列,而是发送到交换机上
- 每个队列都需要绑定到交换机上
- 生产者生产的消息先经过交换机然后到达队列,一个消息可以被多个消费者消费
- 如果消息发送到没有队列绑定的交换机时,消息将会消失,因为交换机没有存储消息的能力,只有队列才有存储消息的能力;
4. 路由模式(routing)
生产者将消息发送到direct交换机,它会吧消息路由到那些binding key 与 routing key 完全匹配的queue中
这样就能实现消费者有选择的去消费消息
5. 主题模式(Tipic)
交换机通过模式匹配分配消息的路由键属性
将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上,它将路由键和绑定的字符串切分为单词,这些单词之间用点隔开(use.news)
同样也会识别两个通配符, "#" 和 "*"
# 匹配0个或者多个单词, * 匹配多个单词
binding key | routing key |
---|---|
logger.# | logger.error logger.info logger.debug |
#.info | logger.info |
交换机类型
参数名 | 类型解释 |
---|---|
direct |
直连交换机 |
fanout |
扇型交换机 |
topic |
主题交换机 |
headers |
头交换机 |
直连交换机
是根据消息携带的路由键(routing key) 将消息投递到对应的队列,步骤如下:
- 将一个队列绑定到某个交换机上,同时赋予绑定一个路由键(routing key);
- 当一个携带着路由键值为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列
扇形交换机
将消息路由给绑定到它身上的所有队列,不同于直连交换机,路由键在此类型上不启任务作用
如果N个队列绑定到某个扇形交换机上,当有消息发送给此扇形交换机时,交换机会将此消息发送给这所有的N个队列
主题交换机
队列通过路由键绑定到交换机上,然后交换机根据消息里面的路由值,将消息路由给一个或多个绑定的队列
扇形交换机和主题交换机异同
- 对于扇形交换机 路由键是没有意义的,只要有消息,它都发送消息到它所绑定的所有队列上
- 对于主题交换机 路由规则由路由键决定,只有满足路由键的规则,消息才可以路由到对应的队列上
头交换机
类似主题交换机,但是头交换机所有多个消息属性来替代路由键建立路由规则,通过判断消息头的值能否与指定的绑定相匹配来确立路由规则
此交换机有个重要的参数:x-match
- 当
x-match
为any时: 消息头的任意一个值被匹配就可以满足条件 - 当
x-match
为all的时候,就需要消息头的所有值都匹配成功
有疑问加站长微信联系(非本文作者)