201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

news2024/12/24 11:26:35

目录

  • ★ 工作队列介绍
  • 代码演示
    • 测试
      • 注意点1:
      • 注意点2:

★ 工作队列介绍

工作队列: 就是让多个消费者竞争消费同一个消息队列的消息,相当于多个消费者共享消息队列。

▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列

▲ 消息队列默认会将消息“均分”给每个消费者,但这样做往往并不合适:
因为有的消费者需要更多时间处理一条消息,有的消费者只要更少时间即可处理一条消息,
如果让它们“均分”这些消息,就会造成资源浪费。

▲ 比较理想的做法是“能者多劳”,让队列将消息多分给需要更少时间的消费者(快),
将消息少分给需要更多时间的消费者(慢)。

▲ 调用Channel的basicQos(int prefetchCount)方法可控制消费者在同一时间点最多能得到的消息数量
——此时应该采用手动确认。

在这里插入图片描述
在这里插入图片描述

这个就是上一篇写的采用自动确认策略
注意: channel.basicConsume 的第二个参数 autoAck:true,就是表示自动确认消息已经被消费完成了。就是当消费者接收到消息之后,就立马返回一个已经确认消费的消息回去给消息队列。
这样容易出现问题,就是消费者这边因为一收到消息就会自动确认消息被消费了并返回已经消费消息的结果回去给消息队列,但是可能消费者其实还没有把消息消费掉,而消息队列那边又以为消费者已经把消息消费了,所以就继续发消息给那个消费者。
而消费者一收到消息又自动确认消费并返回,就会导致这个消息队列的消息越来越多,然后消费者消费不完。
在这里插入图片描述

代码演示

在上一篇的代码基础上修改
200、使用默认 Exchange 实现 P2P 消息 之 消息生产者(发送消息) 和 消息消费者(消费消息)

思路:
1、创建一个消息生产者和两个消息消费者。
2、生产者发送20条消息
3、消费者01 和 消费者 02 都用 channel.basicQos(3); 设置同一时间点只能获取3条消息来处理,只有这3条消息处理完才能再次获取3条消息
4、每个消费者都在消息处理完之后添加 channel.basicAck() 这个方法来手动确认消息成功消费并返回确认成功消费的消息给消息队列。
5、消费者01 每次消费完后,先睡眠个1秒,再手动确认消息已经消费,消费者02不需要,当消息消费完成后就马上手动确认。用于看两个消费者的消费情况

代码如图:
生产者 Producer
生产者代码不变,只是设置发送20条消息
在这里插入图片描述

消费者01 Consumer01
经过测试:同一时间点每次只能消费3条消息,只有这3条消息消费完成,并手动确认消费完成后,才能再获取3条消息进行消费。如果把手动确认消费的代码注释掉,那么这个消费者只能消费到3条消息。最后面有演示:

在这里插入图片描述
在这里插入图片描述

消费者02 Consumer02
多个了睡眠1秒再手动确认消息
在这里插入图片描述
在这里插入图片描述

测试

生产者发送20条消息,消费者01 和 消费者02 每次获取3条消息,消息消费并手动确认后才能再获取3条消息进行消费。
然后消费者02 因为每次消费完都睡眠一秒,而消费者01没有。
这个睡眠 用来演示消费者01的消息处理速度比消费者02 快的情况。
所以那个消费者消费的快,哪个消费者处理的消息就越多
这个就是工作队列:
工作队列 就是让多个消费者竞争消费同一个消息队列的消息,相当于多个消费者共享消息队列。
在这里插入图片描述

注意点1:

如图:这个 multiple 参数,设置为false,表示 不对之前未确认的的消息进行批量确认。
可以经过测试,无论改成true还是false,只要消息队列里面有已消费未确认的消息,再次启动这个消费者,它还是会对之前已消费未确认的消息进行批量确认。
在这里插入图片描述
测试流程:
1、首先,关闭消费者,然后生产者发送20条消息。
现在就是消息队列有20条消息未被消费
在这里插入图片描述

2、这时候把确认消费的代码注释掉,然后如图,成功消费3条消息,但是未确认,还有17条消息待消费。
在这里插入图片描述
3、重新启动消费者01,这个时候正确应该是消费剩下的17条消息,但是那3条消费未确认的消息应该还在。

但是结果却如图:
重启消费者01,把自动确认的代码放开,multiple 为 false,但是最终还是把所有消息消费了,包括3条已消费未确认的消息。

所以感觉这个 multiple 为 false 没起作用。
在这里插入图片描述

在这里插入图片描述

注意点2:

注释掉手动确认代码的演示: 经过测试:同一时间点每次只能消费3条消息,只有这3条消息消费完成,并手动确认消费完成后,才能再获取3条消息进行消费。如果把手动确认消费的代码注释掉,那么这个消费者只能消费到3条消息
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片,内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器,而且本芯片可以通过检测信号频率 和主时钟频…

【Axure高保真原型】冻结固定中继器表格首行+首尾列

今天和大家分享冻结固定中继器表格首行首尾列的原型模板,我们可以滚动或者拖动滚动条上下左右查看表格更多的数据,表格的首行和首尾两列都是固定的,鼠标移入对应行会有高亮显示的效果,点击操作列的删除按钮可以删除该行数据。那这…

智能油烟机 优化烹饪体验

如果说空调是夏天最伟大的发明,那么油烟机则是健康厨房的伟大推进者。随着科技的发展,智能化的油烟机逐渐走进了人们的日常生活。每当我们在爆炒、油炸食物的时候,油烟总能呛得人眼睛痛、鼻子难受,传统的油烟机面前我们还需要手动…

蒙自源荣登“2022年度中国快餐TOP100”榜单!

2023年9月26日,由中国烹饪协会主办的第27届中国快餐产业大会在浙江宁波盛大召开。 对于行业而言,这是一次至关重要的聚会。本次大会以“增量博弈,智造无限机遇”为主题,聚集了众多餐饮业的意见领袖,共同探讨行业发展焦…

第二证券:市净率高好还是低好?

市净率是一个衡量公司股票投资价值的指标,通过比较公司股票价格和公司每股净资产的比值来评估公司股票的估值水平。市净率高好还是低好这个问题并没有一个简单的答案,取决于具体的市场环境和投资者的需求。本文将从多个角度分析市净率高好还是低好。 首…

云HIS医院信息化管理平台源码,SaaS模式、springboot框架

HIS系统作为医院信息化的核心业务系统,如今已成为各个医疗机构的必备品了。大到三级二级医院,小到社区卫生服务中心,门诊(门诊管理系统也可以理解为门诊的his系统,只是功能简单,模块较少)。随着…

STM32F103C8T6一些集成模块(ADC)

ADC ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器 [1] 。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的…

Git 速通以及常用指令!!

参考视频 01 - Git - 教程简介_哔哩哔哩_bilibili 在需要使用git的文件夹打开git bash,指令如下↓ 当然图形化界面也很香!github desktop也很舒服! 查看文件 版本号 git cat-file -p 版本号 仓库操作 在当前文件夹下创建git仓库 git ini…

轻量级Composition

MEF,全称Managed Extensibility Framework(托管可扩展框架)。MEF是专门致力于解决扩展性问题的框架。MEF 位于 ComponentModel.Composition 程序集中,添加 System.ComponentModel.Composition 和 System.ComponentModel.Compositi…

是谁制造了TikTok的商业化困境?

随着社交媒体的崭露头角,TikTok已成为数字营销界备受瞩目的新星。这款以短视频为特色的应用程序在全球范围内拥有数亿用户,吸引了众多品牌和创业者的关注。 然而,尽管TikTok拥有巨大的用户基础和潜力,但它也面临着商业化方面的一…

如何在会计面试中展现自己的优势?

在会计面试中展现自己的优势是非常重要的,因为这将决定你是否能够脱颖而出并获得这个职位。下面是一些可以帮助你展示自己优势的方法: 1. 准备充分:在面试前,确保你对公司的背景和业务有所了解。研究公司的财务报告和新闻&#xf…

搞流式计算,大厂也没有什么神话

抖音、今日头条,是字节跳动旗下最受用户欢迎的两款产品,也是字节跳动的门面。而在这背后,是众多技术团队在支撑,流式计算就是其中一支。 不过,即使是在字节跳动,搞流式计算也没有神话。只有一群年轻人&…

软件测试学习(二)静态白盒测试、动态白盒测试、配置测试、兼容性测试、外国语言测试

静态白盒测试:检查设计和代码 静态是指不启动,白盒是指看内部代码。 静态白盒测试是在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时称为结构化分析。 进行静态白盒测试的首要原因是尽…

使用antd-pro脚手架搭建react ts项目

Pro 中使用 TypeScript 来作为默认的开发语言,TypeScript 的好处已经无须赘述,无论是开发成本还是维护成本都能大大减少,是中后台开发的必选。 初始化 提供了 pro-cli 来快速的初始化脚手架。 # 使用 npm npm i ant-design/pro-cli -g pro…

生产级Stable Diffusion AI服务部署指南【BentoML】

在本文中,我们将完成 BentoML 和 Diffusers 库之间的集成过程。 通过使用 Stable Diffusion 2.0 作为案例研究,你可以了解如何构建和部署生产就绪的 Stable Diffusion 服务。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 Stable Diffusion 2.0 …

“五度情报站”微信小程序上线,让情报信息唾手可得!

当下,全球经济迅速发展,企业的市场竞争环境日益激烈,面对这样的严峻形势,情报信息的获取、分析和应用对于企业的发展变得至关重要。‘五度易链’作为中国产业大数据服务先锋,围绕企业对于情报信息的多元化需求&#xf…

elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现…

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

目录 API 1.0 StringBuilder 类概念 1.1StringBuilder 类中构造器 1.2 StringBuilder 类中 append()方法 1.3 StringBuilder 类中 reverse() 方法 1.4 StringBuilder 类中 length() 方法 1.5 StringBuilder 类中 toString() 方法 1.6 为什么操作字符串…

微信小程序--下拉选择框组件封装,可CV直接使用

一、起因 接到的项目需求,查看ui设计图后,由于微信小程序官方设计的下拉选择框不符合需求,而且常用的第三方库也没有封装类似的,所以选择自己自定义组件。在此记录一下,方便日后复用。 ui设计图如下: 微信官方提供的选择框 对比发现并不能实现我们想要的功能。 二、自定义组件…

Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习

本期为TechBeat人工智能社区第536期线上Talk! 北京时间10月11日(周三)20:00,弗吉尼亚理工大学博士生—徐智阳、沈莹的Talk已准时在TechBeat人工智能社区开播! 他们与大家分享的主题是: “通过多模态指令集微调提升VLM的零样本学习”&#xff…