none
MSMQ неадекватно ведёт себя при интенсивной отправке сообщений RRS feed

  • Вопрос

  • Имеется распределённая программная среда из нескольких приложений, расположенных на разных компьютерах. В качестве одной из форм коммуникаций между ними выбрана технология очередей сообщений MS. Итак от каждой машины предоставляется по нескольку публичных очередей с опцией "Active Directory-integrated". Пока между ними небольшой обмен информацией - примерно пару-тройку десятков сообщений за 15-20 секунд, то всё работает хорошо. Когда же счёт сообщений начинает идти от 50 и больше за тот же временной интервал, то иногда случается ситуация, что процесс службы сервера сообщений начинает потреблять почти 100% ЦП и самое неприятное - блокировать выполнение программы, которая занимается рассылкой, не осуществляя возврат из вызванного метода отправки сообщений.

    Часть кода программы рассылки сообщений:

    for (i=0; i<MSGNUM; i++)

    {

     try

     {

      MessageQueue mq = new MessageQueue("\\\\COMPUTER" + i + \\queue);

      mq.Send("message"); //вот здесь и останавливается выполнение

     }

     catch (Exception e)

    {...}

    }

    Лечится только перезапуском службы MSMQ.

    Можно конечно переписать софт, уйдя на менее глючную уведомлений, но крайне не хотелось бы этого делать.

    ОС Windows Server 2008R2 x64


Ответы

  • Честно говоря, подзабыл уже про эту тему. Вспомнил только в этом месяце.

    Итак. Добавил в программу поток, контролирующий время нахождения в вызове метода отправки сообщений. Если оно превышает 15 секунд, то поток-контролёр перезапускает службу MSMQ.

    p.s. Правка реестра ничего не дала.

    • Помечено в качестве ответа Vasilyev Anton 25 сентября 2012 г. 16:32
    25 сентября 2012 г. 16:32

Все ответы

  • Попробуйте увеличить на своих серверах значения параметра MaxRRThreads в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters. Выставьте это значение, скажем, на 256, перезапустите службу очереди сообщений и проверьте, останется ли проблема.

    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow us on TwitterFollow MSTechnetForum on Twitter

    Посетите Блог Инженеров
    Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html

  • На всех серверах, либо только на проблемном?

    Попробую.


  • В параметрах вообще отсутствует данная величина. В support пишут, что начиная с XP ограничений нет. На всякий случай создал, жду массированной "атаки", о результатах отпишусь.
    8 июня 2012 г. 16:27
  • Ограничения действительно убраны - в Server 2003 в частности, ограничение для этого параметра было 96. Как успехи?

    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow us on TwitterFollow MSTechnetForum on Twitter

    Посетите Блог Инженеров
    Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html

    13 июня 2012 г. 9:13
  • Тема переведена в разряд обсуждений по причине отсутствия активности


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow us on TwitterFollow MSTechnetForum on Twitter

    Посетите Блог Инженеров
    Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html

    15 июня 2012 г. 5:16
  • Честно говоря, подзабыл уже про эту тему. Вспомнил только в этом месяце.

    Итак. Добавил в программу поток, контролирующий время нахождения в вызове метода отправки сообщений. Если оно превышает 15 секунд, то поток-контролёр перезапускает службу MSMQ.

    p.s. Правка реестра ничего не дала.

    • Помечено в качестве ответа Vasilyev Anton 25 сентября 2012 г. 16:32
    25 сентября 2012 г. 16:32