【问题标题】:Monitor multiple RabbitMq subscriptions using single application使用单个应用程序监控多个 RabbitMq 订阅
【发布时间】:2015-08-12 19:12:14
【问题描述】:

我有一个使用 .NET 编写的应用程序,它可以使用单个使用者监控多个 RabbitMq 队列。

例如:

 using (IConnection connection = factory.CreateConnection())
{
    using (IModel channel = connection.CreateModel())
    {
        var _consumer = new QueueingBasicConsumer(channel);        
        string[] list = new string[] { "Queue1", "Queue2", "Queue3", "Queue4" };
        _consumer = new QueueingBasicConsumer(channel);
        foreach (string currQueueName in list)
        {
            channel.QueueDeclare(currQueueName, false, false, false, null);
            channel.BasicConsume(currQueueName, true, _consumer);
        }        

        while (true)
        {
            var ea = (BasicDeliverEventArgs)_consumer.Queue.Dequeue();

            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            Console.WriteLine(" [x] Received {0}", message);
            ProcessMessage(message);
        }
    }
}    

基本上,我只是希望能够跨多个队列分配工作,但只有一个应用程序使用它们(或者可以部署多个应用程序并执行相同的功能)。

我正在尝试将工作分散到队列中,以便消费者在队列中平等地接受工作。

这是否可以使用 Bunny 或原生 Ruby 驱动程序?

【问题讨论】:

标签: ruby rabbitmq amqp bunny


【解决方案1】:

我想我只是需要在这上面多花点时间。

我添加一个简短的答案以防万一这对其他人有帮助(或者如果有人想提供更清洁的解决方案:P)

client = Bunny.new
client.start

channel = client.create_channel
queues = %w(testing1 testing2 testing3)
queues.each do |name|
  channel.queue(name).subscribe(timeout: 2) do |info, props, body|
    puts "[#{name}] Got #{body}"
  end
end
loop do      
  sleep 1
end

这有效地完成了我在 OP 中描述的内容。

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多