У нас есть служба WCF, которая прослушивает сообщения в очереди (MSMQ). Он отправляет запрос на наш веб-сервер (REST API), который возвращает код состояния HTTP.
Если код состояния попадает в диапазон 400, мы отбрасываем сообщение. Идея состоит в том, что ошибка диапазона 400 никогда не может быть успешной (несанкционированный, неверный запрос, не найден и т. Д.), И поэтому мы не хотим повторять попытки.
Для всех других ошибок (например, 500 - Internal Server Error) у нас настроен WCF для помещения сообщения в очередь «повторных попыток». Сообщения в очереди повторных попыток повторяются через определенное время. Идея в том, что сервер временно не работает, поэтому подождите и попробуйте еще раз.
Способ настройки WCF: если мы добавим FaultException
в контракт службы, он автоматически поместит сообщение в очередь повторных попыток.
Когда сообщение вызывает ошибку диапазона 400, мы просто проглатываем ошибку (мы просто регистрируем ее). Это предотвращает срабатывание механизма повтора; однако было бы лучше переместить сообщение в очередь недоставленных сообщений. Таким образом, мы можем отреагировать на ошибку, отправив электронное письмо пользователю и / или системному администратору.
Есть ли способ немедленно переместить эти плохие сообщения в очередь недоставленных сообщений?