2013-02-20 98 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的多播位。按照预期将这些内容和所有作品。