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"
}
}
財產 | 描述 |
---|---|
最大重試次數 | 每則訊息的最大重試次數 |
死信隊列 | 死信隊列名稱,以逗號分隔 |
延遲交換名稱 | 延遲交換名稱 - 處理延遲訊息的交換的名稱 |
延遲隊列名稱 | Delayed Queue name - 接收延遲訊息的佇列名稱 |
延遲死信交換名稱 | 延遲死信 交易所名稱 - 處理延遲訊息的交易所名稱 |
延遲死信隊列名稱 | 延遲死信 Queue name - 接收延遲訊息的佇列名稱 |
延遲值 | 發回訊息以重試之前的延遲時間(以秒為單位)。 |
停車場交換名稱 | 停車場交換名稱 |
停車場排隊名稱 | 停車場排隊名稱 |
規則 | 要在監控引擎中實施的規則清單。每個規則都使用由OriginalExchange MessageType 和DeathReason 清單組成的篩選器來套用。過濾器清單以逗號分隔。 (例如work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - 此篩選器會將規則套用於來自 Exchange work.exchange1 且訊息類型為Namespace.Abstractions 且 DeathReason 為rejected1 的訊息) |
規則:丟棄 | 要丟棄的訊息的訊息過濾器清單。符合此過濾條件的郵件將會自動刪除。 |
規則:重試 | 在達到MaxRetries 之前要重試的訊息的訊息過濾器清單。與此過濾條件相符的訊息將被發送以進行重試。 |
規則:公園 | 要直接停放的訊息的訊息過濾器清單。符合此過濾條件的訊息將發送到停車場。 |
此專案目前支援 Azure 服務匯流排和 RabbitMQ,在命名空間*.Connectors
下實現,用於指定要使用的連接器,在 AppSettings 檔案中,為 MessageBus ( AzureServiceBus
或RabbitMQ
)和相關設定設定適當的選項。
該項目歡迎貢獻和建議。
請參閱我們的貢獻指南,以了解有關如何為 DeadLetterMonitor 做出貢獻的完整說明。
該專案採用了微軟開源行為準則。有關詳細信息,請參閱行為準則常見問題解答或聯繫 [email protected] 提出任何其他問題或意見。