RabbitMQ 五种模式

news/2024/12/26 11:08:06/文章来源:https://www.cnblogs.com/li150dan/p/18548306

RabbitMQ是一种常用的消息队列服务,它提供了五种消息模型:简单模型、工作队列模型、发布/订阅模型、路由模型、主题模型
1. 简单模型(Simple Message Queue,简称SQS):一个生产者,一个消费者,一个队列。
2. 工作队列模型(Work Queue):多个消费者共同处理一个队列中的任务,可以扩展进程数处理更多任务。
3. 发布/订阅模型(Publish/Subscribe):生产者将消息发给所有订阅者(广播方式)。
4. 路由模型(Routing):生产者将消息发给特定的队列,根据路由键。
5. 主题模型(Topics):类似于路由,但是可以使用模式匹配。

说明:以下内容来源自博客https://www.cnblogs.com/Runawayprogrammer/p/15980060.html

一. 简单模式

 

1. 消息生产者将消息放入队列

2. 消息的消费者(consumer) 监听(while) 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失)

3. 应用场景:聊天(中间有一个过度的服务器;p端,c端) 

二. 工作模式(资源的竞争)

 

1. 消息生产者将消息放入队列消费者可以有多个,消费者1,消费者2,同时监听同一个队列,消息被消费者C1 C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息(隐患,高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关(syncronize,与同步锁的性能不一样) 保证一条消息只能被一个消费者使用)

2. 应用场景:红包;大项目中的资源调度(任务分配系统不需知道哪一个任务执行系统在空闲,直接将任务扔到消息队列中,空闲的系统自动争抢) 

三. publish/subscribe发布订阅(共享资源)

 

1. X代表交换机rabbitMQ内部组件,erlang 消息生产者是代码完成,代码的执行效率不高,消息生产者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费

2. 相关场景:邮件群发,群聊天,广播(广告) 

四. 路由模式

 

1. 消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;

2. 根据业务功能定义路由字符串

3. 从系统的代码逻辑中获取对应的功能字符串,将消息任务扔到对应的队列中业务场景:error 通知;EXCEPTION;错误通知的功能;传统意义的错误通知;客户通知;利用key路由,可以将程序中的错误封装成消息传入到消息队列中,开发者可以自定义消费者,实时接收错误; 

五. topic 主题模式(路由模式的一种)

 

1. 星号井号代表通配符

2. 星号匹配不多不少恰好1个词),#匹配一个或多个词

3. 路由功能添加模糊匹配

4. 消息产生者产生消息,把消息交给交换机

5. 交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费 

RabbitMQ -交换机

fanout模式: 

广播式交换器类型(fanout):该类交换器不分析所接收到消息中的Routing Key,默认将消息转发到所有与该交换器绑定的队列中去。广播式交换器转发效率最高,但是安全性较低,消费者应用程序可获取本不属于自己的消息。

 

direct模式:  

直接式交换器类型(direct):该类交换器需要精确匹配Routing Key与BindingKey,如消息的Routing Key = Cloud,那么该条消息只能被转发至Binding Key = Cloud的消息队列中去。直接式交换器的转发效率较高,安全性较好,但是缺乏灵活性,系统配置量较大。

 

topic模式: 

主题式交换器(Topic Exchange):该类交换器通过消息的Routing Key与Binding Key的模式匹配,将消息转发至所有符合绑定规则的队列中。Binding Key支持通配符,其中“”匹配一个词组,“#”匹配多个词组(包括零个)。例如,Binding Key=“.Cloud.#”可转发Routing Key=“OpenStack.Cloud.GD.GZ”、“OpenStack.Cloud.Beijing”以及“OpenStack.Cloud”的消息,但是对于Routing Key=“Cloud.GZ”的消息是无法匹配的。

  

1. 生产者发送消息到交换机
2. 交换机根据routingkey 转发消息给队列
3. 消费者监控队列,获取队列中信息
4. 消费成功删除队列中的消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834117.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何防止手机被远程控制,安全远控推荐ToDesk

随着电子设备及各样应用的兴起,手机可以为人们带来的便利已越来越多,从二十年前的联络通话,到现如今的社交娱乐、导航、缴费等;通过智能手机中的软件均可轻松实现。 然而虽然手机的妙用有很多,但对于一些不太善用电子设备的中老年亲友来说,在使用中却也存在一定的被诈骗风…

Docker不再神秘 ------Ubuntu20.04 安装Docker 及实用技巧,建议收藏

Dockerdocker是一种容器,简而言之就是别人把一堆环境配置好了,你可以下载下来直接拿来使用(我的个人理解),有点像虚拟机你知道吧。比如下面这样,我直接打开了一个小电脑(docker),里面桌面啊、root啊全都有,跟你ubuntu系统类似,单说细节还不完全一样,毕竟它轻便哈哈…

SELF-REFINE: Iterative Refinement with Self-Feedback

1. 概述 基于给定的Prompt,大语言模型生成的Reponse可能不是最好的(这一点我认为当前的LLM大部分都是Decoder架构,基于已生成的结果产生下一个Token,一旦之前生成结果出错,也不容易及时改正。)。 本文为原始的生成添加了额外的反思重写步骤,过程如下:对于给定的\(Input…

基于stm32的bacnet协议

bacnet协议对于国内网站来说,几乎可以说资料为零,通俗大论一遍,具体操作方法屁都没说 先从工具说起 开发工具 BACnetScan:(讯绕提供)(工具1) 链接:https://pan.baidu.com/s/1TJxc0xaEsCT3lJOlG78B7w 提取码:t7bw Yabe:(工具2) 链接:https://pan.baidu.com/s/1jfs…

未能加载文件或程序集 “项目名称对应的程序集,Version=1.0.0.0.culture=neutral.PublicKeyToken=null或它的某一个依赖项。系统找不到指定的文件。

Visual Studio 2022, AutoCAD开发, wpf项目, 因viewmodel中代码出现问题, 造成窗体设计器中无法预览(这个问题通过修改viewmodel代码解决), 删除项目路径下的obj及bin文件夹后, 重新生成项目, 出现新的错误:窗体能够显示了, 但个别控件无法正常显示, 以为是visual …

.Net Core关于项目引用和命名空间导入的一个小坑

.Net Core关于项目引用和命名空间导入的一个小坑 一、.Net Core项目嵌套引用的情况 经笔者测试验证,发现对于一个.Net Core项目Root,其引用另一个.Net Core项目Root.SubA后,Root项目会自动将Root.SubA项目引用的子项目,也纳入其引用项目池中,而无需再手动引用这些子项目。…

考研打卡(18)

开局(18) 开始时间 2024-11-15 16:36:35 结束时间 2024-11-15 16:53:39等会去打剧本杀数据结构1 以下________排序算法的最坏时间复杂度可以做到O(nlog(n))(暨南大学 2010年) A 归并排序 B 快速排序 C 冒泡排序 D 插入排序A 答案归并排序:基于分治的思想,其时间…

前端Git规范

AI前端Git规范 Git分支命名master:主分支,负责记录上线版本的迭代,该分支代码与线上代码是完全一致的。 develop:开发分支,该分支记录相对稳定的版本,所有的feature分支和bugfix分支都从该分支创建。其它分支为短期分支,其完成功能开发之后需要删除 feature/*:特性(功…

DNS批量解析管理软件有什么用

在复杂的网络环境中,DNS批量解析管理软件犹如一把功能强大的钥匙,开启了高效网络管理的大门,为网络运营和维护带来了诸多便利。 1、对于网络服务提供商而言,DNS批量解析管理软件极大地提高了工作效率 传统的DNS解析管理方式在处理大量域名时,往往需要逐个进行设置和调整,…

163邮箱发送邮件通知异常 org.springframework.mail.MailAuthenticationException: Authentication failed

从腾讯企业邮箱切换成163邮箱,邮箱配置经过检查未作调整,网络检查均是正常,但发送邮件时一直报错org.springframework.mail.MailAuthenticationException: Authentication failed。 解决办法: 1.检查smtp服务是否打开(若未打开需要开启)2.客户端授权码需打开3.检查邮箱配…

SpringBoot 3.3.5 集成 mybatis-plus-boot-starter 3.4.2报错

一、环境 JDK:17 SpringBoot:3.3.5 Mybatis-Plus:3.4.2 二、报错信息Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may nee…

js 日期遍历 小算法

js 日期遍历 小算法给一个完整月份日期 list ,怎样遍历出来 类似一个月 日历呢?勉强写了一个 基于vue<table><tbody><template v-for="n in 5"><tr><template v-for="w in 7"><template v-if="(w-1)+(n-1)*7 <…