[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,一经查实,立即删除!

相关文章

卷积算子的介绍

在卷积神经网络(CNN)中,卷积算子(或称为卷积核、滤波器)是一个用于特征提取的重要工具。以下是对卷积算子及其用途的详细解释: 卷积算子是什么? 卷积算子是一个小矩阵(通常为二维&…

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! 分析…

linux 你会配置静态路由吗?

1. centos 1. 配置静态路由 运行在openstack的虚拟机有多网卡的承载不同的物理平面的网络,比如业务网、管理网、存储网等。但是默认路由只有一条,所以只能通过静态路由来指定路由。 for example: 虚拟机eth0是管理网:10.0.43.0/…

【ARM 芯片 安全与攻击 5 -- 测信道攻击(Side-channel Attack)】

文章目录 什么是测信道攻击?测信道攻击在 ARM 架构中的设计与应用电源分析攻击(Power Analysis Attack)DPA 攻击示例时间分析攻击(Timing Attack)时间分析攻击示例缓存侧信道攻击(Cache Side-channel Attack)Flush+Reload 攻击示例应对测信道攻击的防御措施Summary什么是…

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

数据虚拟化(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年企业通用的十大源代码加密…

SNMP入门笔记

简介 SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于…

session、cookie、token概念介绍

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

汽车电子 -- python脚本组包软件版本号

python脚本组包软件版本号 import pandas as pd import click import os import datetimedef cmdGetSwInfo():targetFilePath ../APP.htargetKeyWord #definetargetProgType PROJECT_TYPEtargetSoftware SOFTWARE_VERSIONtargetVersionInfo VERSION_INFO fileRead …

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")…