Это нормально, чтобы никогда не удалять из MSMQ?

Я унаследовал приложение, которое извлекает сообщения из MSMQ, обрабатывает их, а затем добавляет некоторые данные в базу данных в зависимости от того, что находится в сообщении. Сообщения помещаются в очередь сторонним приложением, которое я не контролирую.

Я не знаю много о MSMQ, хотя у меня есть базовое понимание того, как использовать API.

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

Это неправильно? Будут ли сообщения автоматически удаляться, когда очередь достигает какого-то максимального размера, или они просто навсегда накапливаются там, занимая больше памяти?

3 ответа

Решение

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

Тем не менее, я бы предпочел настроить что-то, чтобы периодически очищать очередь, чтобы вы не перегружали сервер. Я не слишком знаком с MSMQ, но есть ли способ узнать, было ли обработано сообщение? Даже если это дополнительная служба, которая запускает, проверяет сообщения в очереди и проверяет их наличие в базе данных, а удаляет их, если они это делают? Таким образом, вам не нужно будет модифицировать кодовую базу, которую вы унаследовали, поскольку она работает как есть.

Как только вы определитесь с решением, пожалуйста, опубликуйте обновление здесь - мне интересно узнать, как вы решаете эту проблему. Спасибо!

После обработки сообщения обычной практикой является его удаление из очереди (транзакционно или иным образом).

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

Похоже, что сообщения экспресс, если до последней перезагрузки их не было. Экспресс-сообщения хранятся только в оперативной памяти и не сохраняются на диске, поэтому перезапуск службы MSMQ уничтожит их. Вероятно, поэтому объем сообщений никогда не достигал критического уровня.

Так как MSMQ использует память ядра и дисковое пространство для хранения памяти, в конечном итоге один из двух выдает и вызывает проблемы со стабильностью работы сервера, поэтому ваш план очистки будет хорошим.

Приветствия, Джон Бруквелл (MSFT)

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