2015-05-29 13 views
5

Ho un'applicazione che ho scritto in .NET in grado di monitorare più code RabbitMq utilizzando un singolo utente.Monitorare più abbonamenti RabbitMq utilizzando un'unica applicazione

Ad esempio:

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

Fondamentalmente, voglio solo essere in grado di distribuire il lavoro su più code, ma hanno solo una sola applicazione tutte (o più applicazioni possono essere implementate lunga e svolgere la stessa funzione).

Sto cercando di estendere il lavoro attraverso le code in modo che i consumatori stiano prendendo lavoro in modo uguale attraverso le code.

È possibile utilizzare Bunny o il driver nativo di Ruby?

+0

E 'possibile consumare da più code usando Bunny? Sì. I tutorial sui coniglietti sono qui http://www.rabbitmq.com/tutorials/tutorial-one-ruby.html –

risposta

0

Credo di aver bisogno di passare un po 'più di tempo su questo.

che sto aggiungendo una breve risposta nel caso in cui questo aiuta a chiunque altro (o se qualcuno vuole fornire una soluzione più pulita: 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 

Questo fa in modo efficace ciò che stavo descrivendo nel PO.