我们有一个处理程序Web应用程序和两个Windows应用程序。我们已将nService Bus配置为在这些应用程序之间发布消息,这些应用程序都在同一台机器上运行。
问题是我们能够在web到窗口app1之间发布消息。此时窗口app1被视为订户,并且它正确地接收消息。现在我们希望窗口app1作为发布者工作并向窗口app2发送消息,然后向窗口app2发送消息(作为订阅者),然后再将app2窗口作为发布者并将消息发送到窗口app1。
NService Bus的Web App(处理程序应用程序)配置部分
<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
窗口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。
提前感谢您的帮助。
答案 0 :(得分:0)
通过在Web配置中定义正确的<MessageEndpointMappings>
并使用Bus.Send而不是使用Bus.Publish,已经修复了上面的问题。通过这个它对我有用。