rabbitmq 在一段时间内获取过多通道错误

ix0qys7i  于 2023-01-20  发布在  RabbitMQ
关注(0)|答案(1)|浏览(221)

我有16 queuesmulitple consumer servers用于这些队列。我有created一个dedicated通道用于each queueconsume消息。Consumerdispatchchannels位于每个服务器共享same connection上。
当我对每个队列执行dispatch messages时,我执行以下操作:
1.创建一个新频道
1.使用正确的路由将通道绑定到队列
1.发送消息
1.关闭通道
我有很多来自Shopify的Webhook &这些Webooks内容被发送到特定的队列。
在处理每条消息时,我需要对Shopify进行API调用。Shopify API有速率限制。如果我达到速率限制一次,我会将所有来自消费者的消息重新发送回rabbitmq,延迟头为1分钟(清除API速率限制所需的时间)。
现在,当我有几个消费者在队列中运行大量消息时,当我重新调度这些消息时,我会在一段时间内得到too many channels错误。
I tried to keep 2 dedicated channels per queue:
1.仅供消费者使用
1.仅用于发送目的
对于16个队列和大约11个消费者服务器。这样的话,我必须一直保持352通道打开。这也是一个问题。因为服务器可能随时崩溃。

zc0qhyus

zc0qhyus1#

在挖掘了RabbitMQ documentation之后,我找到了问题的解决方案。
不是为每个分派创建一个新通道,而是为entire连接session创建I created a single channel & kept it alive。当creating创建通道时,I asserted将由我的队列使用的所有exchanges
然后我用routing key将消息publishdesired exchange,因为我的队列已经与交换绑定了,并且使用给定的路由键监听消息,所以消息最终会到达正确的队列!
这样我就可以只维护01连接&每个服务器只维护01通道!

相关问题