機能の説明
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 のメッセージを取得すると、これを維持するのが難しく、サブスクライバーを混乱させると思います。 .
アイデア募集中…