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