使用RabbitMQ限制AMQP使用者
我在可靠性模式中使用AMQP,我的用例是将消息放入队列中,然后使用它们并将信息插入到Web服务中。 我的Web服务很慢,我的队列可以有很多很多的消息,我想确保消费者不会杀死我的数据库。
是否有一种内置的方式来在RabbitMQ中执行调速,或者是基于时间的(每分钟/每秒钟只有X条消息)或其他一些机制?
每个连接都有流量控制,所以如果服务器上的消息太多,发布者将会等待。 RabbitMQ是非常可靠的系统,我可以说你不必担心它。
如果你正在谈论如何限制消费,可能你必须自己照顾。 你也可以看看channel.flow(从RabbitMQ 3.3.0开始弃用)和basic.qos方法,或者你甚至可以暂时断开消费者的连接并在你的服务能够承担负载时重新连接它们。
UPD我可以建议你使用basic.consume消息并将其提供给你的web服务。 根据您的网络服务处理负载多长时间,您可能会猜测它是负载并进行某种sleep(N)
。 当你的消费者睡觉时,它不会消耗任何东西,因此不会提供Web服务。
我想知道“每连接流量控制”是否与channel.flow()相关。
基本上你可以调用channel.flow(false);
通知经纪人停止发送消息。
调用channel.flow(true);
使流动再次活跃。 这是javadoc。
上一篇: Throttling an AMQP Consumer Using RabbitMQ
下一篇: RabbitMQ / AMQP: single queue, multiple consumers for same message?