DeadLetterMonitor は、カスタム ルールに従って、Pub/Sub アーキテクチャで発生する可能性のあるいくつかのエラーを自動的に処理するツールです。
コンシューマで予期しないダウンタイムが発生した後の再試行、宛先サービスで参照データが適切に設定されていない、構成が欠落しているなどです。
このプロジェクトは、構成されたすべてのデッド レター キューをリッスンし、再試行パターンとサーキット ブレーカー パターンを実行する、単純なデッド レター モニター サービスを実装します。
これは、どのメッセージを再試行するか、その回数、および再試行間の遅延を定義できる一連の単純なルールを実装します。再試行されなかったすべてのメッセージは削除されるか、手動で処理されるために「駐車場」ストレージに移動されます。
モニター エンジンによって処理される配信不能メッセージはすべて、一連のルールに従ってメッセージを破棄、再試行、または駐車場に送信する汎用ハンドラーによって処理されます。
破棄するように構成されたすべてのメッセージは、キューから削除されるだけです。
再試行するように構成されたすべてのメッセージは、元のエクスチェンジ/トピックに送信され、元のサブスクライバーによって再処理されます。この再試行は、インフラストラクチャ内の一時的な問題が確実に解決されるように、遅延を使用して実行されます。
遅延メッセージ: 遅延を作成するために、再試行するすべてのメッセージはdelayed exchange and queue
(TTL 設定を持つ単なるキュー) にポストされます。
遅延メッセージ TTL の有効期限が切れると、メッセージはDelayed Deadletter exchange and queue
に自動的に送信されます。このキューには、メッセージを元のキューに即座に送信する特定のハンドラーが含まれています。
すべての構成はappsettings.json
ファイルに保存されます。
"DeadLetterMonitor": {
"MaxRetries": 2,
"DeadLetterQueues": "deadletter.queue",
"DelayedExchangeName": "delayed.exchange",
"DelayedQueueName": "delayed.queue",
"DelayedDeadLetterExchangeName": "delayed.deadletter.exchange",
"DelayedDeadLetterQueueName": "delayed.deadletter.queue",
"ParkingLotExchangeName": "parkinglot.exchange",
"ParkingLotQueueName": "parkinglot.queue",
"DelayValue": 10000,
"Rules": {
"Discard": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1",
"Retry": "work.exchange,Namespace.Abstractions.GenericEvent,rejected",
"Park": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1"
}
}
財産 | 説明 |
---|---|
最大リトライ数 | メッセージあたりの最大再試行回数 |
デッドレターキュー | デッドレターキュー名 (カンマ区切り) |
DelayedExchangeName | Delayed Exchange name - 遅延メッセージを処理する交換の名前 |
遅延キュー名 | 遅延キュー名 - 遅延メッセージを受信するキューの名前 |
DelayedDeadLetterExchangeName | 遅延デッドレター交換名 - 遅延メッセージを処理する交換の名前 |
遅延デッドレターキュー名 | 遅延デッドレター キュー名 - 遅延メッセージを受信するキューの名前 |
遅延値 | 再試行のためにメッセージを送り返すまでの遅延時間 (秒単位)。 |
駐車場交換所名 | 駐車場引換名 |
駐車場待ち行列名 | 駐車場の列名 |
ルール | 監視エンジンに実装するルールのリスト。各ルールは、 OriginalExchange MessageType 、およびDeathReason のリストで構成されるフィルターを使用して適用されます。フィルターのリストはカンマで区切られます。 (例: work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - このフィルターは、メッセージ タイプがNamespace.Abstractions で DeathReason がrejected1 である Exchange work.exchange1 からのメッセージにルールを適用します) |
ルール: 破棄 | 破棄するメッセージのメッセージ フィルターのリスト。このフィルタ条件に一致するメッセージは自動的に削除されます。 |
ルール: リトライ | MaxRetries に達するまで再試行されるメッセージのメッセージ フィルターのリスト。このフィルタ基準に一致するメッセージは、再試行のために送信されます。 |
ルール: パーク | 直接パークされるメッセージのメッセージ フィルターのリスト。このフィルター条件に一致するメッセージが駐車場に送信されます。 |
プロジェクトは現在、名前空間*.Connectors
で実装された Azure Service Bus と RabbitMQ をサポートしています。使用するコネクタを指定するには、AppSettings ファイルで、MessageBus ( AzureServiceBus
またはRabbitMQ
) と関連する設定の適切なオプションを設定します。
このプロジェクトは貢献と提案を歓迎します。
DeadLetterMonitor に貢献する方法の詳細な手順については、貢献ガイドをご覧ください。
このプロジェクトはマイクロソフトのオープンソース行動規範を採用しています。詳細については、行動規範に関する FAQ を参照するか、追加の質問やコメントがあれば [email protected] までお問い合わせください。