Сообщения MSMQ застряли в исходящей очереди - PullRequest
16 голосов
/ 28 октября 2010

Хотя мой вопрос похож на уже найденный на SO, этот пост мне не помог, поэтому вот он:

Дано:

  • Две машины в одном сегменте (естественно, в одном домене, фактически на одной и той же стойке)
  • Обе машины являются рабочими станциями Windows 7
  • На обеих машинах отключен брандмауэр
  • Обе машины видят друг друга (пинг работает)
  • В одной из них есть личная нетранзакционная очередь сообщений test .
  • У отправителя есть HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\SimpleClient\@BinaryEnabled = 'Yes'
  • Владелец очереди отправляет сообщение с другого компьютера
  • Сообщение застряло в исходящей очереди, так и не достигнув цели.
  • При отправке с той же машины (то есть локально) сообщение приходит в порядке.

Сообщение отправляется с использованием следующего кода:

var q = new MessageQueue(@"FormatName:Direct=OS:il-mark-lap\private$\test");
q.Send(string.Format("Test message sent at {0} from {1}", DateTime.Now, Environment.MachineName));

где il-mark-lap - адрес машины с очередью.

Что, черт возьми, я должен сделать, чтобы заставить это работать?

Большое спасибо.

Ответы [ 6 ]

8 голосов
/ 21 декабря 2011

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

http://support.microsoft.com/kb/2554746

6 голосов
/ 15 февраля 2013

У меня была эта проблема сегодня.Чтобы решить эту проблему, нам пришлось открыть диалоговое окно свойств очереди сообщений принимающего сервера и на вкладке «Безопасность сервера» снять флажок «Отключить неаутентифицированные вызовы RPC».Также в частной очереди Свойства |На вкладке «Безопасность» мы изменили безопасность, чтобы предоставить всем пользователям полный доступ.В моем случае машины находятся в одном сегменте, но не в одном домене.Очередь не транзакционная.Мы используем IP-адреса для привязок конечных точек (WCF), NetBIOS / DNS не используется.

6 голосов
/ 23 октября 2012

Я только что справился с проблемой, вот шаги, которые я предпринял для ее решения:

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

Устранение неполадок MSDTC с помощью инструмента DTCPing

Это, в свою очередь, заставило меня осознатьчто MSMQ сильно зависит от имен NetBIOS - машины должны иметь возможность пинговать друг друга, используя только имена NetBIOS.

После того, как это будет сделано, убедитесь, что вы перезапускаете ВСЕ службы очереди сообщений (как на отправляющей машине, так и нана целевом компьютере, так как он должен иметь возможность выполнять обратную операцию NetBIOS).

В моем случае, когда я получил код DTC с разрешением имени NetBIOS - перезапустил службы - все начало работать магическим образом.

Я настоятельно рекомендую вам посетить эту страницу для получения дополнительных ресурсов.

3 голосов
/ 29 июня 2015

У меня была проблема, когда 2 сервера отправляли сообщения третьему. Только один сервер сообщения были получены. Сообщения от другого были помещены в исходящую очередь как «неподтвержденные».

Проблема заключалась в том, что все компьютеры были клонированы виртуальными машинами и имели один и тот же QMId в разделе реестра: HKLM \ Software \ Microsoft \ MSMQ \ Parameters \ Machine Cache. Мы переустановили MSMQ на серверах, которые устранили проблему.

Ссылки:

http://baleinoid.com/whaly/2012/08/random-bug-msmq-unacknowledged-messages/ http://blogs.msdn.com/b/johnbreakwell/archive/2007/02/06/msmq-prefers-to-be-unique.aspx

1 голос
/ 05 ноября 2012

Ответ довольно прост.Убедитесь, что вы можете использовать telnet порты 1801, 135, 2103 и 2105 как от исходного компьютера до пункта назначения, так и наоборот.Также убедитесь, что MSMQ работает на обеих машинах.

1 голос
/ 10 марта 2011

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

...