我有16 queues
和mulitple consumer servers
用于这些队列。我有created
一个dedicated
通道用于each queue
到consume
消息。Consumer
和dispatch
channels
位于每个服务器共享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
通道打开。这也是一个问题。因为服务器可能随时崩溃。
1条答案
按热度按时间zc0qhyus1#
在挖掘了
RabbitMQ documentation
之后,我找到了问题的解决方案。不是为每个分派创建一个新通道,而是为
entire
连接session
创建Icreated a single channel
&kept it alive
。当creating
创建通道时,Iasserted
将由我的队列使用的所有exchanges
。然后我用
routing key
将消息publish
到desired exchange
,因为我的队列已经与交换绑定了,并且使用给定的路由键监听消息,所以消息最终会到达正确的队列!这样我就可以只维护
01
连接&每个服务器只维护01
通道!