Как я могу явно пометить сообщения как отравленные в транзакционном MSMQ с WCF

Я использую MSMQ версии 4 и имею транзакционную очередь. Я использую WCF для прослушивания очереди на входящие сообщения.

Во время обработки существует зависимость от сторонних компонентов, которые могут выходить из строя или быть недоступными в течение более длительного периода времени. Чтобы компенсировать это, я использую функциональность обработки ядовитых сообщений в MSMQ 4 ( http://msdn.microsoft.com/en-us/library/aa395218.aspx), чтобы повторять сообщения x раз с y количеством времени ожидания.

Однако в определенных ситуациях я знаю, что входное сообщение неверно / отравлено. Когда это происходит, выдача исключений заставляет сообщение следовать стандартной процедуре обработки ядовитых сообщений, как и все другие сообщения со всеми повторными попытками и временем ожидания. Но когда я знаю, что сообщение отравлено, я не вижу причин для повторной попытки и ожидания настроенного времени для его обработки в очереди отравлений.

Есть ли способ явно пометить сообщение как зараженное, чтобы оно не следовало за настроенным потоком повторов и немедленно перемещалось в очередь отравления?

1 ответ

Что ж, я предлагаю в таком случае сохранить данные запроса в БД и не выдавать никаких исключений, чтобы сообщение WCF было успешно обработано и будет удалено из очереди.

Эти данные мы можем обработать позже, если потребуется, данные из БД легче обрабатывать, чем отслеживать / управлять ядовитой очередью.

Вы можете иметь некоторую конфигурацию, основанную на том, что вы можете выбрать следующую временную метку обработки сообщения, и поток может повторно обработать такие сообщения из БД.

Другие вопросы по тегам