2013-02-20 70 views
0

我是新來MassTransit一件事我不明白的是:可能是一個非常愚蠢的MassTransit誤解

如何創建多個.NET ServiceBuses之間的公交車?

把這個代碼:

class Program 
{ 
    static void Main(string[] args) 
    { 

     var container = new WindsorContainer(); 
     container.Register(AllTypes.FromThisAssembly().BasedOn<IConsumer>()); 

     Console.WriteLine("Starting Buses!"); 

     var bus1 = ServiceBusFactory.New(sbc => 
     { 
      sbc.UseMsmq(); 
      sbc.UseMulticastSubscriptionClient(); 
      sbc.ReceiveFrom("msmq://localhost/bus1"); 
      sbc.Subscribe(s => s.LoadFrom(container)); 

     }); 

     var bus2 = ServiceBusFactory.New(sbc => 
     { 
      sbc.UseMsmq(); 
      sbc.UseMulticastSubscriptionClient(); 
      sbc.ReceiveFrom("msmq://localhost/bus2"); 

      sbc.Subscribe(s => s.LoadFrom(container)); 
     }); 

     bus1.Publish(new TestMsg() { Name = "Hello Matt!" }); 

     Console.WriteLine("Sent Message"); 

     Console.ReadLine(); 


    } 
} 
public class TestMsg 
{ 
    public string Name { get; set; } 
} 

public class TestMsgConsumer : Consumes<TestMsg>.All, IBusService 
{ 
    private IServiceBus bus; 

    public void Consume(TestMsg message) 
    { 
     Console.WriteLine("Got message on " + this.Context().Endpoint.Address); 
    } 

    public void Dispose() 
    { 
     if (bus != null) 
      bus.Dispose(); 
    } 

    public void Start(IServiceBus bus) 
    { 
     this.bus = bus; 
    } 

    public void Stop() 
    { 

    } 

} 

我預計「上...得了消息」露面兩次,因爲我有兩個總線。但是,我只有一個。顯然有一些步驟將這兩個總線實例連接到相同的邏輯總線,我不明白這是什麼。我不能將它們指向相同的隊列名稱,因爲再一次,只有一個人會得到該消息。

謝謝!

編輯/解決方案

我從谷歌MT組一些幫助,他們讓我趕緊挺直了......如預期這不是工作,因爲我沒有組播位安裝MSMQ。得到了這些安裝,並按預期工作。

+0

我相信這可能是一個計時問題。你是否嘗試在'ServiceBusFactory.New'和'bus1.Publish'之間進行睡眠。 – Clay 2013-02-20 22:57:13

+0

不,如果我把Thread.Sleep放在那裏,以確保總線啓動並運行,它仍然不會收到消息。 – 2013-02-22 03:55:09

回答

0

查看原始帖子的答案,但基本上沒有安裝MSMQ的多播位。按照預期將這些內容和所有作品。