2012-05-08 8 views
7

Implementé un conjunto simple de editor/consumidor con MassTransit, y quiero que los consumidores lean los mensajes de la misma cola. Sin embargo, cuando lo ejecuto, veo una gran parte de los mensajes enviados a la cola de errores en lugar de consumirse. De las discusiones que he visto (SO, Forum), esto debería ser muy simple con RabbitMQ (simplemente señale la misma cola), pero no está funcionando. ¿Hay alguna configuración adicional que deba establecerse?Consumidores en competencia en tránsito masivo con RabbitMQ

Aquí está mi Editorial

public class YourMessage { public string Text { get; set; } } 
public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Publisher"); 
     Bus.Initialize(sbc => 
     { 
      sbc.UseRabbitMqRouting(); 
      sbc.ReceiveFrom("rabbitmq://localhost/test_queue"); 
     }); 
     var x = Console.Read(); 
     for (var i = 0; i <= 1000; i++) 
     { 
      Console.WriteLine("Message Number " + i); 
      Bus.Instance.Publish(new YourMessage { "Message Number " + i }); 
     } 
    } 
} 

Y Mi Consumidor

public class YourMessage { public string Text { get; set; } } 
public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Consumer"); 
     Bus.Initialize(sbc => 
     { 
      sbc.UseRabbitMqRouting(); 
      sbc.ReceiveFrom("rabbitmq://localhost/test_queue"); 
      sbc.Subscribe(subs => 
      { 
       var del = new Action<IConsumeContext<YourMessage>,YourMessage>((context, msg) => 
       { 
        Console.WriteLine(msg.Text); 
       }); 
       subs.Handler<YourMessage>(del); 
      }); 
     }); 
     while (true) { } 
    } 
} 

Respuesta

5

El receptor/consumidor y el editor no puede estar en la misma cola. Si desea que los consumidores en competencia tengan varias instancias del consumidor corriendo contra la misma cola.

Tenemos documentación, pero esta sección actualmente no existe, por lo que entiendo su confusión: http://readthedocs.org/docs/masstransit/en/latest/configuration/gotchas.html#how-to-setup-a-competing-consumer Si tiene éxito, la ayuda con la documentación sería maravillosa.

4

Por lo tanto, parece que la solución era cambiar la línea en el editor:

sbc.ReceiveFrom("rabbitmq://localhost/test_queue"); 

Para algo como:

sbc.ReceiveFrom("rabbitmq://localhost/test_queue_publisher"); 

Esto impidió que los editores de competir por los mensajes que no eran configurado para consumir

Cuestiones relacionadas