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

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

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

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

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

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

 设置后的结果:ide

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

相关文章
相关标签/搜索