Rabbitmq消息队列:Work工作模式简单应用
一、生产者
直接使用HelloWorld模式下的应用案例依赖和代码,将生产者Give类拷贝一份。
将发送消息部分调整为遍历发送,连发10次:
二、消费者
1、普通分发
直接使用HelloWorld模式下的应用案例依赖和代码,将消费者Get类拷贝两份创建两个消费者,分别为GetOne和GetTwo,将其接受消息展示的内容加上前缀(XXX接收:)表示区分:
同时开启两个消费者的情况下,启动生产者,结果如下:
两个消费者根据启动接收方法的先后顺序,也依次地从消息队列中拿到对应的数据。
将GetTwo的消息处理逻辑调整,添加一个睡眠,模拟实际操作的时间错位:
再次按照上面的方式发送消息,结果如下:
第一个消费者不受影响,第二个消费者每睡眠一段时间拿一次消息。但是依旧如之前一般,GetOne只拿奇数,GetTwo只拿偶数。
也就是说在消息发送的时候,就已经按照两个消费者去分配了,不管谁接收的快,谁接收的慢,都会按照固有的工作量去分配。即便第一个已经接收完五个消息了,而第二个还在缓慢的接收第二个消息。
在实际应用中,这肯定不合适,消息的处理量肯定不是按照这么去分。万一有一个消费者慢了,就会拖慢整个工作任务,很影响应用的整体性能。所以要对规则进行调整,让消费者能者多劳。
2、能者多劳式分发
为了提升整体的运行效率和性能,要对两个消费者做分发规则的调整,在两个消费者的通道上加上:
这样在其中某些消费者运行慢的时候,消息就会更多地向运行快的消费者分发。
再次按照上面的方式运行,结果如下:
在GetTwo接收一次消息之后,陷入了三秒的沉睡,这期间GetOne已经默默帮懒人GetTwo做完了本该属于他的工作。最后结果就是GetOne分发了9条消息,而GetTwo只有一条。
但从整体的角度来看,本次消息分发完所需要的时间,相比之前大大降低了。
之前光是GetTwo接收五条消息所需的四次睡眠间隔就需要12秒,而这次整体只需要三秒多。
__EOF__

本文链接:https://www.cnblogs.com/guobin-/p/17805603.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2018-11-02 NoSQL学习——MongoDB
2018-11-02 HBase相关的一些点