查看“RabbitMQ:工作模式”的源代码
←
RabbitMQ:工作模式
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:RabbitMQ]] == 简单队列 == 最简单的队列模式,只有一个消息生产者,一个消息消费者,一个队列,也称为'''点对点'''模式、一对一模式。 * 消息的顺序是先进先出严格一致的,因为只有一个队列和一个消费者,消息只能一个个消费,自然'''消息顺序严格一致'''。 架构图: : [[File:RabbitMQ工作模式:简单队列.png|400px]] P 代表生产者 , C 代表消费者,红色代表队列。 应用场景: * 适合比较简单的一对一消息通信,且不需要并发消费的场景,例如: 单一的异步发短信、发邮件、异步推送。 == 工作队列(Work模式) == RabbitMQ 工作队列(Work模式),一个生产者,多个消费者,每条消息只能被一个消费者消费,支持'''并发消费消息'''。 * 相对于简单队列来说就是支持并发消费消息,但是'''一条消息只能被一个消费者处理''',因此Work模式也是一对一消费模式。 * 在多个消费者并发消费同一个队列的消息的情况下,'''无法保证消息的严格顺序''': *: 例如:队列中有10条消息,有10个消费者并发处理10个消息,有些消费者执行快、有些执行慢点,这个时候会出现消息处理的顺序,跟队列中消息的顺序不一致,可能后面的消息先执行成功,前面的消息还在处理中,如果你的业务对消息的顺序有严格要求,可以控制每个队列只有一个消费者,这样就可以保证严格消息处理顺序,代价就是并发能力下降。 架构图: : [[File:RabbitMQ工作模式:工作队列(Work模式).png|400px]] P 代表生产者 , C1、C2 代表消费者,红色代表队列。 应用场景: * 单一业务,一对一并发处理,例如:群发邮件,需要发送1000封邮件,可以开启100个消费者,一次并发发送100封邮件。 == 发布订阅模式(广播模式、fanout模式) == 发布订阅模式,就是一个生产者发送的消息会被多个消费者获取,因为'''一条消息会被多个消费者分别消费'''处理,所以也叫广播模式、一对多模式。 * 因为RabbitMQ实现发布订阅模式使用的 exchange 类型是 '''fanout''',所以也叫 fanout 模式。 架构图: : [[File:RabbitMQ工作模式:发布订阅模式(广播模式、fanout模式).png|400px]] # P 代表生产者 , C1、C2 代表消费者,红色代表队列, X代表交换机(Exchange); # 交换机(Exchange)负责将消息转发至绑定交换机的所有队列; # 可以定义多个队列,分别绑定同一个交换机; # 每个队列可以有一个或者多个消费者; * '''同一个队列,一条消息只能被一个消费者处理''',fanout 模式之所以能够实现消息广播,本质上是通过多个消息队列实现。 应用场景: * 发布订阅模式,是一种比较常用一对多消费模式,例如:电商下单之后产生下单消息、仓库模块订阅下单消息处理发货、通知模块订阅下单消息处理发短信、积分模块订阅下单消息处理积分等等,按需订阅消息,实现业务扩展,是一种低耦合的设计模式。 == 路由模式(Direct 模式) == RabbitMQ 路由模式大体上跟发布订阅模式一样,区别在于发布订阅模式将消息转发给所有绑定的队列,而路由模式将消息转发给那个队列是'''根据路由匹配情况决定'''的。 架构图: : [[File:RabbitMQ工作模式:路由模式(Direct 模式).png|400px]] # P 代表生产者 , C1、C2 代表消费者,红色代表队列,X 代表交换机; # 交换机类型为 '''direct'''; #* direct 交换机转发消息逻辑:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行比较,如果'''相等''',则发送到该 Binding 对应的 Queue 中。 #*: 如上图:如果消息的routing key = orange,则转发至Q1队列,消息的routing key = black和green则转发至Q2队列。 应用场景: * 路由模式是在发布订阅模式的基础上进行了扩展,因此应用场景跟发布订阅模式类似,区别是允许设置消息订阅的条件。 例如: : 某电商网站,有华东、华南、华北、西南四个仓库,每个仓库部署了一套仓储系统,用户购物下单后,由最近的仓库负责发货。 : 用户下单后产生下单消息,我们希望将消息转发至对应的地区的仓储系统处理,可以使用路由模式。 : 四个仓储系统的发货队列绑定的routing key如下: :: 华东 = east :: 华北 = north :: 华南 = south :: 西南 = west : 用户下单后计算用户地址属于哪个地区,算出routing key,然后发送下单消息的时候携带routing key即可,RabbitMQ direct交换机会转发至对应的队列。 == 主题模式(Topic 模式) == RabbitMQ“主题模式(Topic)”跟“路由模式”类似,区别在于主题模式的路由匹配支持'''通配符模糊匹配''',而路由模式仅支持完全匹配。 * 如果 routing key 没有匹配任何队列,则丢弃消息,如果 routing key 等于空则跟“fanout模式”一样,直接转发消息给所有队列。 topic 支持的通配符如下: # “'''#'''”:匹配一个或多个单词; # “'''*'''”:仅匹配一个单词; 架构图: : [[File:RabbitMQ工作模式:主题模式(Topic 模式).png|400px]] # P 代表生产者 , X 代表交换机,红色Q1、Q2代表队列,C1、C2 代表消费者; # 交换机类型为 '''topic'''; #* topic 交换机转发消息逻辑:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行'''模糊匹配''',如果匹配则发送到该 Binding 对应的 Queue 中。 #*: 如上图:如果消息的 routing key = “quick.orange.rabbit”,则匹配Q1和Q2两个队列。 应用场景: * 跟路由模式一样,区别就是订阅条件更灵活,即Routing key的匹配规则更灵活。
返回至“
RabbitMQ:工作模式
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息