我已经建立了一个简单的测试,包括有两个用户发布,使用MSMQ和使用本地SQL Server数据库MassTransit(2.1.1)RuntimeServices一台机器上所有正在运行。
我已经包含了总线设置代码的下方,你可以看到发生了什么设置。 我手动和独立启动每个组件尝试锻炼,如果用户ins't运行会发生什么。
我第一次跑了两个用户,因此队列和订阅都设置并退出他们两个,不从消息退订。 如果我再运行它自己,它转储400级的消息队列中的那么快,因为它可以发布,我可以看到两个用户队列中有等待消息的不同数量。
我的假设是,我发布RuntimeServices已经能够自己设定了两个目标队列前。 随着总线设置和发布之间5秒钟时间,我得到了我期待400级的消息在这两个用户等待队列,即有些信息没有公布这两个队列。
我的问题是这样的; 有没有办法告诉如果RuntimeServices愿与数据库中已有的出版商开始时的用户?
这是出版商码
Bus.Initialize(sbc =>
{
sbc.SetCreateTransactionalQueues(true);
sbc.ReceiveFrom("msmq://localhost/andy_publisher");
sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
});
var bus = Bus.Instance;
Thread.Sleep(5000); // this makes it all work :)
int i = 0;
foreach (string filename in System.IO.Directory.EnumerateFiles(@"C:\Users\andy.baker\Pictures\", "*.*", SearchOption.AllDirectories))
{
Console.WriteLine(filename);
bus.Publish(new Messages.FileRegistered {FilePath = filename});
i++;
}
Console.WriteLine("Published {0} messages", i);
Console.ReadLine();
订户可以这样来配置;
Bus.Initialize(sbc => {
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.ReceiveFrom("msmq://localhost/andy_subscriber1");
sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
}
);
...和第二用户...
Bus.Initialize(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.ReceiveFrom("msmq://localhost/andy_subscriber2");
sbc.UseSubscriptionService("msmq://localhost/mt_subscriptions");
}
在此先感谢您的任何建议。