4

私は NServiceBus を初めて使用し、本来よりも難しいと思われることをしようとしています...そのため、nsb の全体像について何かが欠けている場合は、さまよい始めています。

シナリオは次のとおりです。

  • WCF エンドポイントを、実行時間の長い操作を要求するクライアントに公開します。
  • インバウンド リクエストを NServiceBus メッセージにマップしたいと思います。
  • 処理のためにメッセージをバスにパブリッシュします。
  • リクエストを受け取ったことを知らせる返信をクライアントに送信してください。リクエストの処理を開始します。
  • Bus はハンドラーを介してメッセージを処理します。
  • 作業が完了したら、「コールバック」エンドポイント (wcf) でクライアントを呼び出して、実行時間の長い要求の結果をクライアントに返します。

役に立つかもしれない是正的な批判、例、またはリンクを歓迎します。前もって感謝します!

4

3 に答える 3

2

NSB パイプラインを介してこれを行う可能性があります。指定した順序で実行するようにハンドラーを構成できます。あなたの場合、これは通知でブックエンドになります。ユースケースによっては、これらのタイプの通信のみを処理する別のエンドポイントに通知を転送する方がよい場合があります。考慮する必要があるのは、障害シナリオです。ハンドラーが失敗し、メッセージが再試行された場合、どうなりますか?

これはすべて、状態を維持する必要がないという考えに基づいています。その場合は、Sagaの使用を検討する必要があります。これにより、長時間実行されるトランザクションごとに状態が維持され、タイムアウトなど、必要な機能がさらに提供されます。

于 2012-09-04T13:17:39.777 に答える
1

長時間実行されるプロセスは、同期または非同期のいずれかです。両方はあり得ません。

長時間実行されるタスクの非同期処理と進捗情報の生成に NServiceBus を使用できます。アダムはサガについて言及しています。サガを使用して進行状況を追跡できます。また、プロセスをより細かいタスクに分割し、一時的な障害を無料で処理する自動再試行などを提供するのにも役立ちます。

ただし、別のメカニズムを使用して進行状況情報をユーザーに送り返す必要があります。定期的なポーリング、ロング ポーリング、非表示の iframe、websocket など、SignalR によって公開されたアイデアをご覧ください。ブラウザへの通知の送信について説明している素敵なビデオがここにあります。

于 2012-09-05T11:02:22.437 に答える
1

NServiceBus Web サイトによると、NSB エンドポイントを WCF サービスとして公開できます。

相互運用性

わずか 1 行のコードと標準の WCF 構成で、NServiceBus エンドポイントを WCF サービスとして公開できます。必要なことは、要求と応答のタイプを指定する NServiceBus.WcfService から継承する空のクラスを作成することだけで、残りは NServiceBus が次のように行います。

public class MyService : NServiceBus.WcfService<MyCommand, MyErrorCodes> { }

従来の MSMQ クライアントを NServiceBus と統合する作業をいくつか行いました。これは機能しますが、メッセージが正しく構築されていることを確認する必要があります。

NServiceBus エンドポイントに送信されるメッセージは、エンベロープで囲む<Messages/>必要があり、名前空間が必要です。例えば:

<Messages xmlns="http://tempuri.net/MyNservicebusMessage">
  <MyNservicebusMessage body/> ...etc
</Messages>

また、NServiceBus 監査を使用する場合は、MSMQ の "Response Queue" メッセージ ヘッダーに値があることを確認する必要がありますが、値は重要ではないと思います。

于 2012-09-04T08:49:56.190 に答える