Назад | Перейти на главную страницу

Msmq - Не отправлять сообщения, если очередь слишком большая?

Недавно у нас возникла проблема, когда MSMQ (на Windows Server 2008 R2 в рабочей группе) переставал отправлять сообщения. Оказалось, что это произошло из-за того, что MSMQ достиг предела хранилища сообщений и, следовательно, отвечал на все с ужасной ошибкой «недостаточно ресурсов».

Пока достаточно справедливо, но вот в чем дело: насколько мы могли судить, все сообщения, которые занимали все дисковое пространство, предназначались для очереди на другой машине (мы предполагаем, что другая машина временно перестала принимать сообщения по причинам, которые мы еще не выяснили, вызывая резервное копирование всего отправляемого MSMQ). Таким образом, обработка этих сообщений должна фактически освободить дисковое пространство. Действительно, мы обнаружили, что как только мы сняли ограничение на хранение сообщений на отправляющей машине, сообщения начали отправляться. И в какой-то момент позже (мы не видели когда, но эта ветка MSMQ продолжает расти, даже если в очереди нет сообщений указывает, что это должно было произойти через 6 часов), все сообщения p *****. mq, занимавшие дисковое пространство, были очищены, что позволило нам восстановить ограничение на хранение.

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

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

1 MSMQ QM1 отправляет сообщение
2 MSMQ QM2 отправляет сообщение подтверждения
3 Сообщение Ack не может быть доставлено из-за превышения квоты
4 MSMQ QM1 не может завершить отправку (я предполагаю транзакционные сообщения)
5 перейти 1

Как только квота будет снята, эти шаги могут быть успешно выполнены.