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"
}
}
Свойство | Описание |
---|---|
МаксПетрис | Максимальное количество повторов на сообщение |
DeadLetterОчереди | Имена очередей недоставленных сообщений, разделенные запятой |
ЗадержанноеExchangeName | Имя задержанного обмена — имя обмена для обработки задержанных сообщений. |
DelayedQueueName | Имя задержанной очереди — имя очереди для приема отложенных сообщений. |
ЗадержанноеDeadLetterExchangeName | Имя обменника с задержкой недоставленных сообщений — имя обмена для обработки задержанных сообщений. |
ЗадержанноеDeadLetterQueueName | Отложенное недоставленное письмо Имя очереди — имя очереди для приема отложенных сообщений. |
DelayValue | Время задержки в секундах перед отправкой сообщения на повтор. |
ИмяПарковкиОбмен | Обмен названия парковки |
ПарковкаЛотОчередьИмя | Название очереди на парковку |
Правила | Список правил для реализации в движке монитора. Каждое правило применяется с помощью флитера, состоящего из списка OriginalExchange MessageType и DeathReason . Список фильтров разделяется запятой. (например, work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 — этот фильтр применит правило к сообщению из Exchange work.exchange1 с типом сообщения Namespace.Abstractions и DeathReason rejected1 ) |
Правила: Сбросить | Список фильтров сообщений, которые будут отброшены. Сообщения, соответствующие этому критерию фильтра, автоматически удаляются. |
Правила: Повторить попытку | Список фильтров сообщений, которые будут повторяться до тех пор, пока не будет достигнуто значение MaxRetries . Сообщения, соответствующие этому критерию фильтра, отправляются на повтор. |
Правила: Парк | Список фильтров сообщений для прямой парковки. Сообщения, соответствующие этому критерию фильтра, отправляются на парковку. |
В настоящее время проект поддерживает Azure Service Bus и RabbitMQ, реализованные в пространстве имен *.Connectors
. Чтобы указать, какой соединитель использовать, в файле AppSettings установите соответствующий параметр для MessageBus ( AzureServiceBus
или RabbitMQ
) и соответствующие параметры.
Этот проект приветствует вклад и предложения.
Пожалуйста, ознакомьтесь с нашим руководством по участию, чтобы получить полные инструкции о том, как вы можете внести свой вклад в DeadLetterMonitor.
В этом проекте принят Кодекс поведения Microsoft с открытым исходным кодом. Для получения дополнительной информации см. часто задаваемые вопросы о Кодексе поведения или свяжитесь с нами по адресу [email protected], если у вас возникнут дополнительные вопросы или комментарии.