订户接收但不向其他订户发布消息

时间:2013-07-17 05:07:18

标签: winforms asp.net-mvc-3 iis-7 nservicebus

我们有一个处理程序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。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

通过在Web配置中定义正确的<MessageEndpointMappings>并使用Bus.Send而不是使用Bus.Publish,已经修复了上面的问题。通过这个它对我有用。