2

機能の説明

NServiceBus ゲートウェイ ( http://docs.particular.net/nservicebus/gateway/ ) は、NServiceBus インフラストラクチャを使用して内部Webhook を実現する方法のようです。

この概念をさらに進めて、システムに Webhook URL を登録するためのアクセス権を持つサードパーティ サブスクライバーにいくつかイベントを開く必要があります。

レビュー

2 つの初期ウィンドウ サービスを作成する予定です。

1) 関心のある特定のメッセージにサブスクライバーとして追加できる WebHookBatchService。

<UnicastBusConfig>
    <MessageEndpointMappings>
           .......
        <add Messages="MyMessages.MyImportantMessage, MyMessages" Endpoint="WebHookBatchService.Queue"/>
           .......
    </MessageEndpointMappings>
</UnicastBusConfig>

2) WebHookProcessService - WebHookBatchService によって送信された 1 つのメッセージを実際に処理します。

メッセージが WebHookBatchService.Queue で受信されると、WebHookBatchService は特定のテナント + メッセージ タイプのすべてのサブスクライバーを検索し、foreach は WebHookProcessService の WebHookProcessService.Queue に個々のメッセージを送信します (バッチをブリッジするために nservicebus ロードバランサーのインスタンスを作成できます)。おそらくhttp://restsharp.org/を使用して、実際のメッセージを実際に処理します。

質問

現在、これを行っている既存のオープン ソース プロジェクトはありますか?

サブスクライバーの耐久性を制御できない場合、エラーをどのように管理すればよいでしょうか?

http://wiki.shopify.com/WebHook

まったく同じ Webhook で 19 回連続して失敗した場合、Webhook は削除されます。

Webhook の遅延については言及されていません。再試行ロジックの標準的な遅延で、人々は何を経験しましたか?

その他の考えは次のとおりです。

提案 0: MaxRetries="1". WebHookProcessService.ErrorQueue を毎晩パージします。(再試行なし - 最初に失敗した場合、メッセージの損失が保証されます)

提案 1: 例外キャッチで MaxRetries="1" http 経由で配信されるメッセージの xml バージョンを含む電子メールを送信します。
WebHookProcessService.ErrorQueue を毎晩パージします。-- 潜在的なスパムの問題があると思います。

提案 2: nservicebus MaxRetries は遅延なくすぐに再試行します。そのため、(1 時間 - 24 時間) バケット キューを作成し、RetrySchedulerService を使用する必要がありますが、サービス エンドポイントが機能し始めたときに、DateCreated で順序付けられていない方法で一度に 25 のメッセージを取得すると、これを維持するのが難しく、サブスクライバーを混乱させると思います。 .

アイデア募集中…

4

1 に答える 1

1

ゲートウェイは通常、HTTPを介した物理サイト間の通信に使用されます。コールバックを受け入れるためにエンドポイントをワールドに公開しているので、組み込みのWCFホスティングを使用して、ファイアウォールを介してエンドポイントをサードパーティに公開できると思います。残りのセットアップは私にふさわしいと思います。

エラーについては、正解です。NSBはすぐに再試行しますが、Webコールバックを使用している場合は、小さな問題が発生した場合に問題が発生する可能性があります。エラーキューをどのように処理するかを決定する必要があります。新しいエンドポイントを組み込んで、再試行や遅延などを決定するロジックを使用してエラーキューを処理します。これを実現する良い方法は、Sagaを使用することです。タイムアウトマネージャー。これにより、指定した回数だけ再試行し、別の通信を試行し、すべてをログに記録し、最終的にサードパーティに連絡できる人に通知して、何かが壊れていることを知らせるワークフローが可能になります。

于 2011-12-09T12:30:49.990 に答える