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

李昊天 · · 1405 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

工作模式

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的时候,就需要消息头的所有值都匹配成功

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:李昊天

查看原文:RabbitMQ入门4-工作模式和交换机类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1405 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传