ハンドラー Web アプリケーションと 2 つの Windows アプリケーションがあります。すべて同じマシンで実行されているこれらのアプリケーション間でメッセージを発行するように nService Bus を構成しました。
問題は、web とウィンドウ app1 の間でメッセージを発行できることです。この時点で、ウィンドウ app1 はサブスクライバーとして扱われ、メッセージを適切に受信します。ここで、ウィンドウ app1 をパブリッシャーとして機能させ、ウィンドウ app2 にメッセージを送信し、次にウィンドウ 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" />
上記の Web アプリのグローバル Asax ファイル
protected void Application_Start(object sender, EventArgs e)
{
Bus = NServiceBus.Configure.WithWeb()
.DefaultBuilder()
.MsmqSubscriptionStorage()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.UnicastBus()
.MsmqSubscriptionStorage()
.CreateBus()
.Start();
}
Web アプリから NService バスを介してメッセージを受信するウィンドウ App1 は、ウィンドウ app2 にメッセージを送信するために NService バスを発行するパブリッシャーとして扱われるようになりましたが、機能しません。
同じの構成セクション
<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 です。
事前にご協力いただきありがとうございます。