rabbitmq 多队列在一个通道中消耗

v1l68za4  于 2023-02-22  发布在  RabbitMQ
关注(0)|答案(1)|浏览(290)

我使用rabbitMq来管理和处理队列。我有多个队列。它们的数量不具体。我使用direct exchange来发布消息。我如何只使用一个通道来消费每个队列的所有消息(基于routing_key)?此时我假设我有5个队列。我使用for loop并为每个队列创建一个通道。如下所示:

stuff=["shoes","pants","hats","jewels","glasses"];

  stuff.forEach(cnt => 
    {
        var ex = 'stuff';
        var cq=cnt;

        amqp
        .connect('amqp://localhost')
        .then(conn => conn.createChannel())
        .then(ch => {

            ch.assertExchange(ex, 'x-delayed-message', { durable: true, 
     arguments: { 'x-delayed-type': 'direct' } })
     return ch
             .assertQueue(cq, { durable: true })
             .then(() =>  {   ch.bindQueue(cq, ex, cq)  /*second cq is routing*/  
                 })
                  .then(() => {
                  ch.consume(cq, (msg) =>
                  {

                   console.log("['%s']  '%s'",cq, msg.content.toString()); 
                   if( msg.content.toString()!=null)
                   console.log(cq);

                          reciveMSG=JSON.parse(msg.content.toString());

                    }, { noAck: true });
               }); 
         }) 

     });

但是我只想用一个通道来做.因为它更乐观并且使用更少的内存(我不知道它是真的还是假的!).有没有一种方法来处理非特定的队列计数?

wooyq4lh

wooyq4lh1#

您可以使用一个通道来使用多个队列,但是您将逐个接收消息,即使它们来自不同的队列。我非常肯定一个队列上的通道异常将停止使用所有队列。

**注意:**RabbitMQ团队监控rabbitmq-users邮件列表,仅在StackOverflow上偶尔回答问题。

相关问题