[000-01-022].第09节:RabbitMQ中的消息分发策略

我的后端学习大纲

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.mzph.cn/bicheng/52239.shtml

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

相关文章

js 实现对一个元素得拉伸

前言: 最近写一个项目遇到了需要拉伸调整一个元素得大小(宽高)。所以打算实现一下。 思路就是用 mousedown、mousemove、mouseup 来实现。 mousemove是动态获取坐标,然后 动态改变元素宽度 js自己实现: html里实现…

使用html-docx-js + fileSaver实现前端导出word

因为html-docx-js是16年的老库了,它代码里面用到的with语法现在严格模式不允许,用npm直接引入会报错,所以我们需要用其它方式引入 首先要将html-docx-js的代码放到项目中 html-docx-js/dist/html-docx.js at master evidenceprime/html-do…

Coze插件发布!PDF转Markdown功能便捷集成,打造你的专属智能体

近日,TextIn开发的PDF转Markdown插件正式上架Coze。 在扣子搜索“pdf转markdown”,或在Coze搜索“pdf2markdown” 即可找到插件,在你的专属智能体中便捷使用文档解析功能。 如果想测试解析插件在你需要的场景下表现如何,可以直接…

网络安全之xss靶场练习

目录 一、xss靶场练习 1、Ma Spaghet! 2、Jefff 第一个方法 第二个方法 3、Ugandan Knuckles 4、Ricardo Milos 5、Ah Thats Hawt 6、Ligma 7、Mafia​编辑 8、Ok, Boomer 一、xss靶场练习 靶场地址 https://xss.pwnfunction.com/ 页面显示如下 1、Ma Spaghet! 分析…

谈一谈数据虚拟化的技术核心和应用架构

数据虚拟化(Data Virtualization)是对数据资源的抽象,通过屏蔽数据资源的存储位置和访问方式,能够将不同数据源、不同格式的数据资源,进行逻辑上的整合集成。这一技术方案与过去面对传统数仓的弊端,业界过去…

板子电源接线

目的 就是电源接板子时,分清正负 过程 AC、交流电 没有正负 分火线和0线 AC-L 交流火线 AC-N 交流0线 FG:接的是大地 G:是直流输出的地 U:表示的是电压 DC是直流正,DC-是直流负 2个AC是接交流的,一般是左…

免费的真是太香了!Chainlit接入抖音 Coze AI知识库接口快速实现自定义用户聊天界面

前言 由于Coze 只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPT web/open webui等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办…

源代码一定要加密!10款超级好用的源代码加密软件排行榜

在当今高度竞争的商业环境中,源代码不仅是软件产品的基础,更是企业的核心资产之一。保护源代码免受未经授权的访问和盗窃至关重要。为此,许多企业采用源代码加密软件来为这一重要资产增加额外的安全层。以下是2024年企业通用的十大源代码加密…

session、cookie、token概念介绍

一、Cookie 1、cookie介绍 Cookie是网站为了辨别用户身份而储存在用户本地终端(Client Side)上的小型文本文件。 作用:Cookie主要用于保存用户登录信息、浏览记录等,以便用户再次访问时能够自动识别并提供个性化服务。存储位置…

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查,来检查自己的文章是不是负荷收录准测,如果页面有严重的错误,搜索引擎是不会进行收录的,而且还会判定文章为低质量文章! 检查是否有问题。下面的页面就是有问题,当然如果是误报你也可…

【与C++的邂逅】--- 类和对象(上)

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客将讲解C中的类和对象,C是面向对象的语言,面向对象三大特性是封装,继承,多态。学习类和对象,我们可…

[数据集][目标检测]集装箱缺陷检测数据集VOC+YOLO格式4127张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4127 标注数量(xml文件个数):4127 标注数量(txt文件个数):4127 标注…

echart改变legend样式及分页

legend: {type: "scroll",orient: horizontal, // 纵向,默认横向不用写pageIconColor: #1b9aee, //翻页下一页的三角按钮颜色pageIconInactiveColor: #7f7f7f, //翻页(即翻页到头时)// 配置滚动类型的图例pageTextStyle: {color: &…

C语言每日好题(3)

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 #define _CRT_SECURE_NO_WARNING #include <stdio.h> #include <string.h> int main(void) {if ((strlen("abc") - strlen("abcdef")) > 0)printf(">\n")…

C++_进阶:AVL树

文章目录 1. AVL树的概念2. AVL树节点的定义3. AVL树的插入4. AVL树的旋转4.1 右单旋4.2 左单旋4.3 左右双旋4.4 右左双旋 5.AVL树的验证6. AVL树模拟实现 1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#…

git 学习--GitHub Gitee码云 GitLab

1 集中式和分布式的区别 1.1 集中式 集中式VCS必须有一台电脑作为服务器&#xff0c;每台电脑都把代码提交到服务器上&#xff0c;再从服务器下载代码。如果网络出现问题或服务器宕机&#xff0c;系统就不能使用了。 1.2 分布式 分布式VCS没有中央服务器&#xff0c;每台电脑…

将 hugo 博客搬迁到服务器

1. 说明 在 Ubuntu 22.04 上使用 root 账号&#xff0c;创建普通账号&#xff0c;并赋予 root 权限。 演示站点&#xff1a;https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …

python | 图片转换为 pdf 实现方法

目录 一、PIL 库简介及安装使用方法 &#xff08;一&#xff09;python 不同版本下 PIL 的使用方法 二、图片转换为 pdf 的两种实现方法 &#xff08;一&#xff09;简易版——pdf 页面尺寸跟随图片大小 &#xff08;二&#xff09;常用版——pdf 每页尺寸统一为 A4 一、P…

shellcode汇编复习

shellcode汇编复习 一、 汇编代码复习1.1 基础寄存器1. EAX (Accumulator Register)2. EBX (Base Register)3. ECX (Count Register)4. EDX (Data Register)5. ESI (Source Index Register)6. EDI (Destination Index Register) 二、 基础指令1. mov - 数据传送2. add - 加法3.…

Ansys Zemax|如何有效地模拟散射

附件下载 联系工作人员获取附件 概要 OpticStudio中&#xff0c;有两个用来提升散射模拟效率的工具&#xff1a;Scatter To List以及Importance Sampling。在这篇文章中&#xff0c;我们详细讨论了这两个工具&#xff0c;并且以一个杂散光分析为例示范了如何使用Importance S…