2015-05-29 22 views
5

Tek bir tüketici kullanarak birden fazla RabbitMq kuyruğunu izleyebilen .NET'te yazdığım bir uygulama var.Tek bir uygulamayı kullanarak birden fazla RabbitMq aboneliğini izleyin

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); 
     } 
    } 
}  

Temelde, sadece birden kuyruklar genelinde iş dağıtmak, ancak yalnızca tek bir uygulama hepsini (ya da birden fazla uygulama dağıtılabilir tüketen ve aynı işlevi yerine edebilmek istiyorum: Örneğin

).

Kuyrukları sıraya göre yaymaya çalışıyorum, böylece tüketiciler kuyruklarda eşit işlerde çalışıyorlar.

Bu, Bunny veya yerel Ruby sürücüsünü kullanarak mümkün mü?

+0

Bunny kullanarak birden çok kuyruktan yararlanmak mümkün mü? Evet. Bunny öğreticiler burada http://www.rabbitmq.com/tutorials/tutorial-one-ruby.html –

cevap

0

Sanırım bunun için biraz daha zaman harcamam gerekiyordu.

ben bu yardımcı olur ihtimale kısa bir cevap ekliyorum başkasının (ya da birisi daha temiz bir çözüm sağlamak istiyorsa: 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 

Bu etkin ben OP anlatırken yapar.

İlgili konular