2012-05-08 18 views
7

MassTransit ile basit bir yayıncı/tüketici seti uyguladım ve tüketicilerin de iletileri aynı sıradan okumasını istiyorum. Ancak, çalıştırdığımda, tüketilmek yerine hata sırasına gönderilen iletilerin büyük bir kısmını görüyorum. Gördüğüm tartışmalardan (SO, Forum), bu RabbitMQ ile gerçekten çok basit olmalı (sadece aynı sıraya bakın), ama işe yaramıyor. Ayarlanması gereken ek bir yapılandırma var mı?RabbitMQ ile Toplu Taşımada Tüketicilerin Rekabet Edilmesi

Burada aynı sıraya olamaz Benim Yayınevi

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

Ve My Tüketici

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

cevap

5

alıcı/tüketici ve yayıncı bu. Rekabet eden tüketiciler istiyorsanız, tüketicinin aynı kuyruğa karşı çalışan birden fazla örneği vardır.

Belgelere sahibiz, ancak bu bölüm şu anda eksik durumda, bu yüzden şu an karışıklığınızı anlıyorum: http://readthedocs.org/docs/masstransit/en/latest/configuration/gotchas.html#how-to-setup-a-competing-consumer Başarılı olursanız, belgelerinizin yardımı harika olur. Bu onlar değildi mesajları için yarışan karşı yayıncıları engelledi

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

: gibi bir şey için

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

:

4

Yani, çözüm yayıncı içinde hat değiştirmek gibi görünüyor tüketmek için yapılandırılmış.