Что означает код HRESULT 0xC00E0088 (MQ_ERROR_MESSAGE_NOT_FOUND)?

 
Предыдущий Следующий
MQ_ERROR_PROPERTIES_CONFLICT MQ_ERROR_CANT_RESOLVE_SITES

MQ_ERROR_MESSAGE_NOT_FOUND

Что означает MQ_ERROR_MESSAGE_NOT_FOUND

MQ_ERROR_MESSAGE_NOT_FOUND (0xC00E0088) — Сообщение не существует либо уже удалено из очереди.

Получение сообщения в MSMQ изменяет состояние самой очереди: destructive receive удаляет сообщение, а транзакционный receive связывает его судьбу с commit/abort. Поэтому конкурирующие потребители, курсоры и повторные вызовы могут наблюдать уже другое состояние, даже если используют тот же lookup id или позицию.

Что проверить

  • Проверьте, не был ли message lookup id уже потреблён другим consumer или транзакцией.
  • Сопоставьте lookup id с конкретной очередью и её временем жизни; идентификатор нельзя переносить на пересозданную очередь как глобальный.
  • Перед retry заново запросите текущее состояние очереди вместо повторного использования устаревшей позиции.

Как подтвердить исправление

Повторяйте исходный сценарий с новым корректно открытым объектом и отдельно проверяйте конкурентный путь. Простое исчезновение ошибки после перезапуска службы не доказывает устранение гонки или ошибки времени жизни.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.