私たちが持っているとしましょう
- HTTP ゲートウェイ アウトバウンド サービスを使用するクライアント ノード
- HTTP ゲートウェイ インバウンド サービスを備えたサーバー ノード
クライアントノードでMSMQ自体が何らかの理由で停止する状況を考えます。現在の実装では、Rebus HTTP ゲートウェイが例外をキャッチします。
キャッチするだけでなく、MessageQueueException 例外をサーバー ノードに送信してエラー キューに入れるというアイデアについてどう思いますか? (エラーキューの名前はヘッダーから収集できます)
したがって、追加のインフラストラクチャ サーバーがなければ、クライアントに問題があることがわかり、誰かが対応できるようになります。
アップデート:
回答に記載されている問題が発生すると思いました。私のシナリオをもっと詳しく説明するべきでした:)申し訳ありません。ここにあります:
InboundService がメッセージの送信と受信の両方を実行できるように、HTTP ゲートウェイを変更します。そのため、サーバーから新しいメッセージを取得してそのメッセージをサーバーに送信するために、接続を開始するのは OutboundService だけです (定期的に、たとえば 5 分に 1 回)。これは、クライアント ノードがサーバーではなく、NAT の背後にある多くのクライアントの 1 つと見なされるためです。
実際、サーバー自体はクライアントの状態には関心がありませんが、 HTTP ゲートウェイの HTTP ゲートウェイ コードを使用するクライアント側で個別のアラート サービスを作成する代わりに、HTTP ゲートウェイでこれを行うことができると思いました。サイドランニング。
クライアントがサーバーにまったく到達できない場合はどうなりますか?
MSMQ は死んでしまうので、私はhttp://ayende.com/blog/4540/building-a-managed-persistent-transactional-queueのようなインプロセスのスタンドアロンの永続的なキュー オブジェクトを使用することを考えました (単なる実装例です。サーバーに到達できるまでクライアント側で例外を集約するためのライセンスの種類がわからない)。
また、エラーが発生したことをクライアントがサーバーに通知する頻度は?
その部分についてはよくわかりません-5分に1回などのメッセージ同期のスケジュールされた時間に関連している可能性があると思いましたが、現在の実装(while(true)ループ)のようにスケジュールされた時間がない場合はどうなりますか?たぶん、configで設定できますか?
私はエラー処理について一貫した戦略を持ちたいと思っています。これには通常、単純な古い NLog ロギングが含まれます
クライアント ノードは、NAT 標準の監視技術の背後にあるインターネットにあるため、機能しません。キューを NLog トランスポートとして使用することを考えましたが、MSMQ が機能しなくなるため、機能しません。
HTTP を NLog トランスポートとして使用することも考えましたが、サーバー側ではキューが必要になるので (実際にはそうではありませんが、キューに格納したいと思います)、sbus と HTTP ゲートウェイに戻ります...そのような NLog トランスポートはHTTP ゲートウェイの事実上のクローンになります。
更新 2: NLog トランスポートとしての HTTP (トランスポートとはターゲットを意味します) には、「クライアントがサーバーにまったく到達できない場合はどうなりますか?」で説明したように、クライアント側のキューも必要になります。セクション。NLog に埋め込まれた HTTP ゲートウェイのクローンになります。狂気:)
すべてのことは、クライアントが信頼できないということです。そのため、サーバー側でクライアントに関するすべての情報を取得し、そこにログインしたいと考えています。
更新3
別の解決策として、別のサービスを作成することもできますが、これは HTTP ゲートウェイの一部になります (例: OutboundAlertService)。その後、次の 3 つの目標が達成されます。
- 共有送信ループ コード
- 追加のサーバー インフラストラクチャは不要
- OutboundService に悪影響を与えません (インプロセス キューを追加する複雑さはありません)。
OutboundService から例外を受け取ることはありませんが、MSMQ 自体を定期的にチェックします。
さらに他の代替ソリューションは、MSMQ キュー以外を NLog ターゲットとして使用することですが、それは見苦しいやり過ぎです。