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。得到了这些安装,并按预期工作。
我相信这可能是一个计时问题。你是否尝试在'ServiceBusFactory.New'和'bus1.Publish'之间进行睡眠。 – Clay 2013-02-20 22:57:13
不,如果我把Thread.Sleep放在那里,以确保总线启动并运行,它仍然不会收到消息。 – 2013-02-22 03:55:09