MSMQ: что может вызвать ошибку «Недостаточно ресурсов для выполнения операции» при получении из очереди?

MSMQ: Что может вызвать ошибку «Недостаточно ресурсов для выполнения операции» при получении из очереди?

В то время в очереди было только 2000 сообщений, каждое из которых было размером около 5 КБ.


person Jonathan Allen    schedule 13.11.2009    source источник
comment
Вероятно, у вас происходит утечка ресурса (памяти, дескрипторов и т. Д.).   -  person Jerry Bullard    schedule 14.11.2009
comment
Я согласен, ручки - моя ставка. Какая ОС?   -  person SqlACID    schedule 14.11.2009


Ответы (6)


Из блога Джона Брейквелла есть одиннадцать возможностей:

  1. Пул потоков для удаленного чтения исчерпан (только MSMQ 2.0).
  2. Превышено количество локальных потоков обратного вызова
  3. Объем сообщений превышает допустимый для системы (только MSMQ 2.0).
  4. Память ядра выгружаемого пула исчерпана.
  5. Несоответствующие двоичные файлы.
  6. Размер сообщения слишком велик.
  7. Квота машины превышена.
  8. Проблемы маршрутизации при открытии внешней очереди транзакций (только MSMQ 3.0)
  9. Недостаток места на диске.
  10. Проблемы с хранением на мобильных устройствах
  11. Кластеризация слишком большого количества ресурсов MSMQ
  12. Слишком много открытых подключений
  13. Имя компьютера было длиннее 15 символов
  14. Слишком много сообщений в очереди недоставленных сообщений

http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/761035.aspx

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

person Ragepotato    schedule 13.11.2009
comment
Это было количество открытых подключений. Была ошибка, из-за которой он открывал соединения в цикле и никогда не закрывал их. - person Jonathan Allen; 14.11.2009
comment
Что именно считается подключением к очереди? Я работаю с управляемым .NET API для организации очередей сообщений, и в документации MSDN никогда не упоминается концепция «соединений». - person Dan Ling; 11.02.2014
comment
В .NET каждый MessageQueue объект считается соединением, поэтому вам нужно Dispose их. - person Jonathan Allen; 28.02.2017
comment
Эта ссылка не работает. Используйте docs.microsoft.com. / ru-ru / archive / blogs / johnbreakwell / - person kevinpo; 13.06.2020

У меня было такое же сообщение об ошибке, и решение было простым.

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

  • Диспетчер сервера - ›Возможности

  • Щелкнул правой кнопкой мыши очередь сообщений

  • Выбранные свойства

  • На вкладке "Общие" снимите флажок с лимитов хранилища.

Мне сообщили, что службы, использующие MSMQ, будут перезапущены, после чего ошибка исчезла.

person Philip    schedule 21.01.2014
comment
Хорошие инструкции. Хотя я бы все равно установил предел ... оставив его максимально большим, вы рискуете переполнить жесткий диск. Это, в свою очередь, может вызвать даже более серьезные ошибки, чем недопустимые ресурсы msmq для выполнения операции. - person goamn; 22.07.2014
comment
Верно, хотя отслеживать пространство на жестком диске очень легко, и ИТ-отделу не нужно знать о каких-либо других ограничениях, о которых следует знать. - person Philip; 04.08.2014
comment
также доступно через Computer Managment - ›Message Queuing, щелкните правой кнопкой мыши -› Properties - person inwenis; 18.09.2017

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

person Hugo Forte    schedule 10.04.2014
comment
Это тоже решило проблему для меня, за исключением того, что это была очередь недоставленных транзакций. - person Scott; 09.03.2015

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

person kmoo01    schedule 01.05.2019

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

person Jasper S.    schedule 12.09.2018

Для меня проблема была не в машине, на которой размещалась очередь. Это была машина, которая отправляла сообщение в очередь. Я заметил, что «Исходящие очереди» на исходном компьютере показывают большое количество сообщений, что привело меня к Сообщения MSMQ застревают в исходящей очереди. Для меня это исправила переустановка MSMQ на исходном компьютере.

person kevinpo    schedule 15.06.2020