我是NServiceBus的新手,我有一个问题。
我有一个WCF服务,我的发布者(我知道我不应该使用wcf发布)。 我有另一个WCF服务作为订阅者。
我的问题是,当第二个wcf服务要订阅发布者时,我的发布者不会将此信息存储在msmq中(使用.MsmqSubscriptionStorage()时)。 但是当发布者将订阅者存储在内存中时(.InMemorySubscriptionStorage())
,它就可以工作如何强制我的总线使用msmq?
下面我将给出发布者和订阅者的代码。
发布者总线初始化:
Bus = NServiceBus.Configure.WithWeb()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional( false )
.PurgeOnStartup( false )
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender( false )
.MsmqSubscriptionStorage()
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
发布商配置:
<configSections>
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
订阅者总线初始化:
Bus = NServiceBus.Configure.WithWeb()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.LoadMessageHandlers()
.CreateBus()
.Start(() => Confgure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
订阅者配置:
<configSections>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="FirstService" />
</MessageEndpointMappings>
</UnicastBusConfig>
答案 0 :(得分:3)
我弄清楚出了什么问题。应该使用.IsTransactional(true)
设置发布者,以便为订阅者使用MSMQ存储。