消费RabbitMQ时的注意事项,如何禁止大量的消息涌到Consumer

按照官网提供的订阅型写法( Retrieving Messages By Subscription ("push API")) 我发现,RabbitMQ服务器会在短时间内发送大量的消息给Consumer,然后,如果你没有来得及Ack的话,那么服务端会积压大量的UnAcked消息,而Consumer如果来不急处理也会处于假死(也可能引起程序崩溃)。

仅有两个Channel,结果积压了大量的UnAcked消息。

这明显是与我们的目的不一致,我们不能保证Consumer一 定会急时快速的处理消息。所以这种方式带来的后果就是Consmer崩溃后,UnAcked消息又ReQueue,这肯定会消耗MQ的宝贵资源。

我试图在官网上找到一种方法,让每条消息明确的Ack后再接受下一条。但是好没有。好在在gitbooks.io/rabbitmq-quick/ 这儿找到了,通过设置Channel的QOS即可

var channel = Connect.CreateModel();
channel.BasicQos(0,1,false); //RabbitMQ客户端接受消息最大数量

 设置后的结果:

在开启4个Consumer的情况下,每条消息处理要耗时2秒。然后问题解决了。Unacked的消息只有4个。

时间: 2024-10-25 14:49:57

消费RabbitMQ时的注意事项,如何禁止大量的消息涌到Consumer的相关文章

页面重构时的注意事项

页面重构时的注意事项 1. 重构页面时,什么样的代码才算是好的代码? 2. 重构时如何告诉设计师,他设计的东西太丑? 1. 重构页面时,什么样的代码才算是好的代码? 这个我感觉要从三方面来做答,基础的就不说了,那些语义化,结构化,兼容性等等方面的问题.说说中级部分的: 页面的健壮性: 这个怎么说呢,按我的理解,UI出的psd图是一个页面理想状态下的形态,而真实上线后,会出现三种极端状态,一,数据极多,二,数据极少,三,数据刚好(其实就是PSD设置描述的一个状态).所以在页面排版的时候,考虑这设计

局部变量与全局变量在声明时的注意事项

/* ============================================================================ Name : TestVariable.c Author : lf Version : Copyright : Your copyright notice Description : 局部变量与全局变量在声明时的注意事项 全局变量只能要常量赋值,但是局部变量可用常量和表达式以及函数赋值. 这是为什么呢? 程序在开始执行时需要用适当的值来初

使用MySQL-Proxy读写分离时的注意事项

在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSyncReplicationDesign补丁. 端口问题 MySQL-Proxy缺省使用的是4040端口,如果你想透明的把3306端口的请求转发给4040的话,那么可以: iptables -t nat -I PREROUTING -s ! 127.0.0.1 -p tcp --dport 3306 -j

给电脑系统备份时的注意事项

给电脑系统备份时的注意事项 当你的电脑随着使用时间变长,由于各类程序的安装,或许会出现各式各样的系统问题,如系统经常崩溃,病毒突然来袭等等.给电脑系统备份是必然的一个选择.那么在进行系统备份之前我们应该注意哪些事项呢? 首先如果你选择系统自带的备份工具,那么请确定你自己完全能够自行操作,以免误操作导致电脑不能使用. 可以对你的系统盘(C盘)里面的垃圾文件进行简单清理(可以去网上查下那些C盘文件是可以进行清理的),这样备份出来的镜像文件会更小,备份时间也不会那么长. 建议备份系统的时候最好是你重新

SSH框架整合jar包时的注意事项

SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候javassit的jar出现了两个不同版本的,需要把低版本的删除掉. 原文地址:https://www.cnblogs.com/wyhluckdog/p/10139375.html

Oracle数据库表设计时的注意事项

表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与管理上,或多或少,会犯一些错误.笔者今天就谈谈自己在这方面的经验与教训,或许能够给大家一些警示作用. 表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计

MySQL DROP TABLE操作以及 DROP 大表时的注意事项

语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] 可一次删除一张或多张表.需具有所删除表上的DROP权限. 表定义文件和数据文件均被移除.表被删除后表上的用户权限不会被自己主动删除. 參数里表中指定的表名不存在则报错,但对于存在的表仍会删除.可通过指定IF EXISTS阻止表不存在时引发的错误(此时对于不存在的表仅产生一个NOTE).

源代码加密软件采购时的注意事项!

大型源代码开发企业在选购源代码安全加密产品时,建议按照下列步骤以及注意事项内容开展企业级源代码加密软件的选型工作. 1.纵深级驱动加密技术和安全技术 企业级源代码加密软件有驱动层技术和应用层技术两种不同的技术路线.应用层Hook方式虽然实现起来比较简单,属于过渡技术,已经进入淘汰阶段了,现在的主流技术是驱动层技术.在版本支持方面也会相应有所不同,驱动层技术的部分厂商已经推出能够支持Windows Vista的版本. 2.源代码加密密钥和算法 在加密算法上,采用何种加密算法不是重点.但是在密钥处理

使用$.ajax时的注意事项

做PHP难免接触js,我也是这样,使用ajax的时候,我比较习惯使用$.ajax({}),这种方式,因为通用性较强.有时候会较少使用js,隔一段时间后再使用,有些细节内容容易模糊不清,这一次,我又忘记多个参数时的 data的格式是怎样的,于是百度上找,发现了: jquery手册描述: data 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 processData 选项说明以禁止此自动转换.必须为 Key/Value 格式.如果为数组,jQuery 将自