2015-05-29 12 views
5

Ich habe eine Anwendung, die ich in .NET geschrieben habe, die mehrere RabbitMq-Warteschlangen mit einem einzigen Verbraucher überwachen kann.Mehrere RabbitMq-Abonnements mit einer einzigen Anwendung überwachen

Zum Beispiel:

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

Grundsätzlich mag ich nur in der Lage sein, die Arbeit über mehrere Warteschlangen zu verteilen, hat aber nur eine einzige Anwendung sie alle konsumiert (oder mehr Anwendungen eingesetzt werden können und die gleiche Funktion).

Ich versuche, die Arbeit über Warteschlangen zu verteilen, so dass die Verbraucher die Aufträge gleichmäßig über die Warteschlangen nehmen.

Ist dies mit Bunny oder dem nativen Ruby-Treiber möglich?

+0

Ist es möglich, mit Bunny aus mehreren Warteschlangen zu konsumieren? Ja. Bunny Tutorials sind hier http://www.rabbitmq.com/tutorials/tutorial-one-ruby.html –

Antwort

0

Ich denke, ich musste nur ein bisschen mehr Zeit damit verbringen.

Ich füge eine kurze Antwort nur für den Fall hilft dies jemand anderes (oder wenn jemand will eine saubere Lösung bieten: 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 

Diese effektiv tut, was ich in dem OP beschreiben.