У меня есть процессор, который принимает сообщения из очереди хранилища. Это сообщение имеет тайм-аут видимости. Но иногда процессору требуется больше времени, чем тайм-аут, поэтому другой экземпляр процессора принимает сообщение для повторной обработки (второй раз невозможно пройти через весь поток в процессоре, поскольку у меня есть некоторая проверка). Во второй раз сообщение обрабатывается быстрее и удаляется до того, как весь поток завершится в первый раз.
Но когда поток завершается, он также хочет удалить уже удаленное сообщение. В результате я получаю ошибку:
Message = "Unable to translate bytes [92] at index -1 from specified code page to Unicode.
Можно ли проверить, удаляется ли сообщение, прежде чем пытаться удалить его во второй раз?
@GauravMantri, ваша догадка верна
Первое, что нужно попробовать, - сделать таймаут видимости достаточно длинным, чтобы можно было быть уверенным, что обработка завершится до истечения таймаута.
Если это не вариант или если вам нужна дополнительная безопасность, вы можете использовать CloudQueue.UpdateMessage()
, чтобы увеличить тайм-аут видимости сообщения.
Укажите, используете ли вы очередь хранилища Azure или очередь служебной шины Azure (я предполагаю, что вы используете очереди хранилища).