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] 提出任何其他问题或意见。