Это нормально, чтобы никогда не удалять из MSMQ? - PullRequest
2 голосов
/ 11 мая 2009

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 11 мая 2009

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

1 голос
/ 04 июня 2009

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

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

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

Ура, Джон Бруквелл (MSFT)

1 голос
/ 11 мая 2009

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

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

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

...