我在发布/订阅方案中使用MsmqSubscriptionStorage,并且在订阅尚未存储时第一条消息丢失。如果我在GenericHost中运行时看到调试消息,则会看到所有订阅都已设置,但第一条消息永远不会发送给订阅者。如果发送更多消息,则它们被成功发送给订阅者(如日志中所示)当使用MsmqSubscriptionStorage时,NServiceBus 2.0丢失首次发布的消息
我正在使用版本2.0.0.0。
这是我使用的总线配置。
var bus = Configure.With(
new List<Assembly>
{
typeof(Configure).Assembly,
typeof(IBus).Assembly
})
.DefaultBuilder()
.Log4Net()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
看起来你只是告诉NServiceBus扫描它自己的DLL(基于传递给With()的程序集) - 这可能不是最好的主意。 –
在我的示例中,我忽略了对我的消息def的引用。我这样做的原因是该文件夹包含许多非.NET程序集,我将不得不拥有大量的排除项。如果我只列出我的程序集,我会得到:“类型NServiceBus.Unicast.Transport.CompletionMessage未在序列化程序中注册。”我认为你是对的,它可能与这种用法有关,并试图现在确认它。 –