RabbitMQ中消息的分发策略

news2024/12/25 14:02:26

我的后端学习大纲

RabbitMQ学习大纲


1.不公平分发:

1.1.什么是不公平分发:

  • 1.在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮训分发,但在某种场景下这种策略并不是很好,比方说有两个消费者在处理任务,其中有个消费者 1 处理任务的速度非常快,而另外一个消费者2处理速度却很慢,这个时候我们还是采用轮训分发的化就会到这处理速度快的这个消费者很大一部分时间处于空闲状态,而处理慢的那个消费者一直在干活,此时轮训分配方式在这种情况下就不好,但RabbitMQ 并不知道这种情况它依然很公平的进行分发。为避免这种情况,可以在消费者方设置参数 channel.basicQos(1)
    在这里插入图片描述

1.2.编码实现不公平分发:

  • 1.在消费者方添加如下两行代码,实现消息的不公平分发:
    在这里插入图片描述
  • 2.管理页面这里代表的是不公平分发:
    在这里插入图片描述
  • 3.测试:
    在这里插入图片描述

1.3.此种模式下可能存在的问题:

  • 如果这个任务我还没有处理完或者我还没有应答你,你先别分配给我,我目前只能处理一个任务,然后 rabbitmq 就会把该任务分配给没有那么忙的那个空闲消费者
  • 当然如果所有的消费者都没有完成手上任务,队列还在不停的添加新任务,队列有可能就会遇到队列被撑满的情况,这个时候就只能添加新的 worker 或者改变其他存储任务的策略
    在这里插入图片描述

2.预取值

在这里插入图片描述

2.1.什么是预期值:

  • 1.本身消息的发送就是异步发送的,所以在任何时候,channel 上肯定不止只有一个消息
  • 2.另外来自消费者的手动确认本质上也是异步的。因此这里就存在一个未确认的消息缓冲区因此希望开发人员能限制此缓冲区的大小,以避免缓冲区里面无限制的未确认消息问题。这个时候就可以通过使用 basic.qos 方法设置“预取计数”值来完成的

2.2.管理页面上查看预取值:

  • 1.这里是管理页面上代表预取值的地方,默认是1:在这里插入图片描述
  • 2.该值定义通道上允许的未确认消息的最大数量。一旦数量达到配置的数量,RabbitMQ 将停止在通道上传递更多消息,除非至少有一个未处理的消息被确认,例如,假设在通道上有未确认的消息 5、6、7,8,并且通道的预取计数设置为 4,此时 RabbitMQ 将不会在该通道上再传递任何消息,除非至少有一个未应答的消息被 ack。比方说 tag=6 这个消息刚刚被确认 ACK,RabbitMQ 将会感知这个情况到并再发送一条消息。消息应答和 QoS 预取值对用户吞吐量有重大影响

2.3.预取值说明:

  • 1.通常,增加预取将提高向消费者传递消息的速度虽然自动应答传输消息速率是最佳的,但是,在这种情况下已传递但尚未处理的消息的数量也会增加,从而增加了消费者的 RAM 消耗(随机存取存储器),所以应该小心使用具有无限预处理的自动确认模式或手动确认模式,消费者消费了大量的消息如果没有确认的话,会导致消费者连接节点的内存消耗变大,所以找到合适的预取值是一个反复试验的过程,不同的负载该值取值也不同 100 到 300 范围内的值通常可提供最佳的吞吐量,并且不会给消费者带来太大的风险
  • 2.预取值为 1 是最保守的。当然这将使吞吐量变得很低,特别是消费者连接延迟很严重的情况下,特别是在消费者连接等待时间较长的环境中。对于大多数应用来说,稍微高一点的值将是最佳的。
    在这里插入图片描述

2.4.编码实现预取值:

在这里插入图片描述

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

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

相关文章

基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文

TOC springboot478基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文 绪 论 1.1开发背景 改革开放以来,中国社会经济体系复苏,人们生活水平稳步提升,中国社会已全面步入小康社会。同时也在逐渐转型&#xf…

【中项第三版】系统集成项目管理工程师 | 第 15 章 组织保障

前言 本章的知识点预计上午会考1-2分,下午可能会考,一般与其他管理领域进行结合考查。学习要以教材为主。 目录 15.1 信息和文档管理 15.1.1 信息和文档 15.1.2 信息(文档)管理规则和方法 15.2 配置管理 15.2.1 基本概念 …

web渗透测试 学习导图

web渗透学习路线 前言 一、web渗透测试是什么? Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透,以下所说的Web…

测绘程序设计|初识C#编程语言|C#源码结构|面向对象|MFC、WinFrom与WPF

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~ 根据笔者经验,分享了C#编程语言、面向对象以及MFC、WinForm与WPF界面框架相关知识~ 🌿前言 c#作为测绘程序…

微信小程序SSL证书申请重点和方法

微信小程序运行模式主要在手机微信内,这一套程序可以解决了用户注册账户及支付相关问题,另外使用很方便,用户不用特意的去安装小程序,只要在微信里面就可以开发,只因为这样微信小程序很受欢迎。 对于开发者来说&#…

车企数据治理实践:业务场景为抓手势在必行

在这个信息爆炸的时代,数据已经成为推动企业发展的核心动力,而数据治理则是确保数据价值得以最大化发挥的关键。在整车制造的研发、生产及供应链业务中,数据治理扮演着举足轻重的角色。 数据治理对于提升数据质量至关重要。高质量的数据是企…

elemeUI中table的列内容宽度不够时的省略号如何去掉

在外层套个div来解决 <div><el-input-number class"no-ellipsis" style"width: 88px;" size"small" controls-position"right" v-model{scope.row.supplied_area}></el-input-number> </div>

Java中优化大量数据导出到Excel的内存消耗(三):边读边写

优化大量数据导出到Excel的内存消耗&#xff08;二&#xff09;&#xff1a;如果数据超出Excel单表上限&#xff0c;则进行分表_txt导入excel超出最大行如何自动分表-CSDN博客 数据导出进行边读边写excel方式导出 DataSource dataSource dataSourceService.getByDsName(reque…

二手车交易系统功能案例分析

一、系统概述 二手车交易系统旨在连接卖家与买家&#xff0c;提供车辆信息发布、搜索、评估、交易、支付及售后服务等一站式解决方案。该系统需具备高度的可扩展性、稳定性和安全性&#xff0c;以满足日益增长的市场需求。 二、核心功能分析 1. 车辆信息发布与管理 功能描述…

三维坐标的旋转矩阵转换测试Demo(ROS1 RVIZ)

已知空间上的某一个点P在坐标系1下的位置为 P1&#xff08;1,2,3&#xff09;&#xff0c;需要求出P在三维空间坐标系0之间的相对关系&#xff0c;其中坐标系1是相对于坐标系0绕着x轴旋转60度后转化。示意如下图 程序设计 定义P点在坐标系1下的位置 array np.array([1,2,3…

vscode开发android ndk的环境配置

vscode开发android ndk的环境配置 最近公司新需求&#xff0c;要求用C/C实现部分核心代码&#xff0c;打包成静态库跨平台&#xff08;Android和iOS&#xff09;使用。 作为Android开发出身的C/C老白程序员兴奋不已&#xff08;又可以开心的学习niubility的C/C了&#xff09;&…

SpringCloudAlibaba基础七-2 seata的使用

一 Seata 是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…

pycharm创建文件自动生成文件头信息

pycharm创建文件自动生成文件头信息 1、设置步骤 file -> settings->Editor->File and Code Templates->Python Script 2、pycharm预定义的变量&#xff08;小写无效&#xff09; ${PROJECT_NAME}:项目名称${PRODUCT_NAME}:集成开发环境${NAME}:文件名${USER…

高效工作与持续学习:程序员如何平衡成长与编码任务?

在当今瞬息万变的技术世界中&#xff0c;程序员面临着前所未有的挑战和机遇。随着项目复杂性的增加和新技术的层出不穷&#xff0c;如何在繁忙的日常编码任务与自我提升之间找到平衡&#xff0c;已成为许多程序员心中的困惑。这不仅关乎职业生涯的发展&#xff0c;更关系到个人…

Transformer系列-3丨BERT模型和代码解析

1 前言 前面两篇文章&#xff0c;笔者从网络结构和代码实现角度较为深入地和大家解析了Transformer模型和Vision Transformer模型&#xff08;ViT&#xff09;&#xff0c;其具体的链接如下&#xff1a; 基础Transformer解析 ViT模型与代码解析 本期内容&#xff0c;笔者想…

贪心+构造,CF 1592F1 - Alice and Recoloring 1

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1592F1 - Alice and Recoloring 1 二、解题报告 1、思路分析 操作2、3可以…

C++系列-多态的基本语法

多态的基本语法 多态的含义静态多态动态多态 多态的底层原理多态中的final和overridefinaloverride: 多态的应用和优点计算器简单实现电脑组装的实现 《游山西村》 南宋陆游 莫笑农家腊酒浑&#xff0c;丰年留客足鸡豚。 山重水复疑无路&#xff0c;柳暗花明又一村。 箫鼓追…

leetcode118. 杨辉三角,老题又做

leetcode118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1…

AI视频创作应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…