我在可靠性模式中使用AMQP,我的用例是将消息放入队列,然后使用它们并将信息插入到Web服务中。我的网络服务很慢,我的队列可能有很多很多消息,我想确保消费者不会杀死我的数据库。
是否有一种内置的方式在RabbitMQ中执行限制,基于时间(每分钟只有X消息/秒/小时)或其他一些机制?
答案 0 :(得分:2)
有per-connection流控制,因此如果您在服务器上有太多邮件,发布商将等待。 RabbitMQ是非常可靠的系统,我可以说你不用担心它。
如果您正在谈论如何限制消费,可能您必须自己照顾它。您还可以查看 channel.flow (已被RabbitMQ 3.3.0}和basic.qos方法弃用,或者您甚至可以临时断开消费者并重新连接它们服务将能够承担负担。
<强> UPD 强>
我建议您使用basic.consume使用邮件并将其提供给您的网络服务。根据您的Web服务进程负载有多长,您可能会猜测它是负载并执行某种sleep(N)
。当您的消费者正在睡觉时,它不会消耗任何东西,因此不会提供任何Web服务。
答案 1 :(得分:0)
我想知道是否&#34;每个连接流量控制&#34;与channel.flow()。
有关基本上,您可以致电channel.flow(false);
通知经纪人停止发送消息
调用channel.flow(true);
会使流程再次处于活动状态。这是javadoc。