RabbitMQ入门4工作模式和交换机类型

42次阅读

共计 1252 个字符,预计需要花费 4 分钟才能阅读完成。

工作模式

1. 简单队列模式(simple queue)

只包含一个生产者和一个消费者 生产者将消息发送到队列中
消费者从队列中接收消息

2. 工作队列模式(work Queues)

一个生产者对应多个消费者, 一条消息只被一个消费者进行消费
工作队列有轮询分发和公平分发两种模式

2.1 平均分配

公平分配,每次只给一个消费者分配一个

ch.Qos(1, 0, false)

3. 发布 - 订阅模式(Publish/SubScribe)

  1. 一个生产者, 多个消费者
  2. 每个消费者都有自己的消息队列, 分别绑定到不同的队列上
  3. 生产者没有把消息发送到队列, 而是发送到交换机上
  4. 每个队列都需要绑定到交换机上
  5. 生产者生产的消息先经过交换机然后到达队列, 一个消息可以被多个消费者消费
  6. 如果消息发送到没有队列绑定的交换机时, 消息将会消失, 因为交换机没有存储消息的能力, 只有队列才有存储消息的能力;

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) 将消息投递到对应的队列, 步骤如下:

  1. 将一个队列绑定到某个交换机上, 同时赋予绑定一个路由键(routing key);
  2. 当一个携带着路由键值为 R 的消息被发送给直连交换机时, 交换机会把它路由给绑定值同样为 R 的队列

扇形交换机

将消息路由给绑定到它身上的所有队列, 不同于直连交换机, 路由键在此类型上不启任务作用
如果 N 个队列绑定到某个扇形交换机上, 当有消息发送给此扇形交换机时, 交换机会将此消息发送给这所有的 N 个队列

主题交换机

队列通过路由键绑定到交换机上, 然后交换机根据消息里面的路由值, 将消息路由给一个或多个绑定的队列

扇形交换机和主题交换机异同
  • 对于扇形交换机 路由键是没有意义的, 只要有消息, 它都发送消息到它所绑定的所有队列上
  • 对于主题交换机 路由规则由路由键决定, 只有满足路由键的规则, 消息才可以路由到对应的队列上

头交换机

类似主题交换机, 但是头交换机所有多个消息属性来替代路由键建立路由规则, 通过判断消息头的值能否与指定的绑定相匹配来确立路由规则
此交换机有个重要的参数: x-match

  • x-match 为 any 时: 消息头的任意一个值被匹配就可以满足条件
  • x-match 为 all 的时候, 就需要消息头的所有值都匹配成功

正文完
 0