我们有一个处理程序 Web 应用程序和两个 Windows 应用程序。我们已经配置了 nService Bus 来发布这些应用程序之间的消息,所有这些应用程序都在同一台机器上运行。
问题是我们能够将 web 之间的消息发布到窗口 app1。此时窗口 app1 被视为订阅者并正确接收消息。现在我们希望窗口 app1 作为发布者并向窗口 app2 发送消息,然后向窗口 app2(作为订阅者)发送消息,然后再次将窗口 app2 作为发布者并向窗口 app1 发送消息。
NService Bus 的 Web 应用程序(处理程序应用程序)配置部分
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
<section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core"/>
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core"/>
</configSections>
<MsmqTransportConfig InputQueue="IndustrialCommsEngineQueue"
ErrorQueue="IndustrialErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<MsmqSubscriptionStorageConfig Queue="CommsSubscriptionQueue" />
上述网络应用程序的全局 Asax 文件
protected void Application_Start(object sender, EventArgs e)
{
Bus = NServiceBus.Configure.WithWeb()
.DefaultBuilder()
.MsmqSubscriptionStorage()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.UnicastBus()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
}
Window App1 通过 NService 总线从 Web 应用程序接收消息现在我们希望将其视为发布者以发布 NService 总线以将消息发送到窗口 app2 但它不起作用。
相同的配置部分
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
<section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" />
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
<MsmqTransportConfig InputQueue="IndustrialBREQueue" ErrorQueue="IndustrialErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<MsmqSubscriptionStorageConfig Queue="BRESubscriptionQueue1"/>
<Logging Threshold="WARN"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="ComEventMessage" Endpoint="IndustrialCommsEngineQueue"/>
<add Messages="AlarmEventMessage" Endpoint="IndustrialAlarmEngineQueue"/>
</UnicastBusConfig>
在单击按钮时触发窗口 app1 中的发布代码代码如下
IBus bus =NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
窗口 app2 需要从窗口 app1 接收消息,但该消息无法正常工作,我们还希望窗口 aap2 作为发布者发布 NService 总线,并在处理此过程中断的数据后将一些数据发送回窗口 app1。
Window app2 的配置部分
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
<section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core"/>
<section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core"/>
</configSections>
<MsmqTransportConfig InputQueue="IndustrialAlarmEngineQueue" ErrorQueue="IndustrialErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings><add Messages="BREEventMessage" Endpoint="IndustrialBREQueue"/> </MessageEndpointMappings>
</UnicastBusConfig>
在窗口 app2 中发布代码
[STAThread]
static void Main()
{
IBus bus = NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormAlarmsEngine());
}
早些时候,这个过程是有效的,但有些人如何停止不弄清楚我们现在缺少什么。我们所做的只是在停止 b 到 c 和 c 到 b 连接之后重新启动了放置这些应用程序的服务器。此外,我们没有得到 b 到 c 进程的消息队列。我们想要的过程是 A 到 b , b 到 c 和 c 到 b 。
提前感谢您的帮助。