Я отлаживаю на сайте где наше выполнение приложения на отказоустойчивом кластере с 3 узлами с кластерной группой MSMQ для организации очередей сообщения. Мы видим, что системные работы над некоторыми комбинациями узлов, но не всех, таким образом заменяют безопасность, не так хорошо как предназначенный.
Проблема с получением сообщений от кластеризованной очереди.
Когда наше выполнение приложения на кластерном узле B или C, это работает, независимо от которого узла работает MSMQ (работы =, наше приложение получает сообщения). Когда наше выполнение приложения на узле A, это перестало работать из-за сервиса очереди сообщений, не доступного, независимо от того, куда MSMQ работает.
Чтобы перепутать вещи еще больше, я создал маленький WCF-MQ-proxy сервис с клиентом GUI, который позволяет мне отправлять команду службе, которая затем отправит к или получит от очереди сообщений, как указано клиентом - и даст как можно больше обратной связи в процессе. Шаблон является тем же с этим приложением, кроме узла, где это перестало работать, узел C - независимо от того, куда MSMQ работает.
Вот некоторые вещи, которые я проверил:
Я - просто разработчик, не эксперт по инфраструктуре Microsoft каким-либо образом, таким образом, я хотел бы спросить: что рекомендуемые шаги должны взять при отладке кластеризованной установки MSMQ как это?
Итак, после нескольких недель отладки этого самостоятельно и вместе с группой поддержки Microsoft Message Queue решение было найдено.
TLDR; решение состоит в том, чтобы удалить или переименовать раздел реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<SERVICENAME>\Environment
Причина ошибки в том, что клиент MQ не может найти службу MQ в локальной системе - а это необходимо для связи с удаленным MQ - вроде как локальная служба SMTP пересылка ваших писем в удаленные системы. Однако в данном случае локальная система является не узлом кластера, а «группой кластера», и в этой группе кластера не работает служба MQ (поскольку это не настоящая система, а просто псевдоним). Причина, по которой клиент MQ ищет службу в группе кластеров, заключается в том, что в настройках службы кластера установлен флажок «Использовать сетевое имя для имени компьютера». Это добавляет новое значение в реестр узлов кластера, устанавливая среду для службы. И настоящая проблема заключается в том, что когда этот флажок снят, он не удаляет значение из реестра, что фактически делает невозможным правильную очистку параметра (из графического интерфейса) после его установки. Поэтому исправление состоит в том, чтобы удалить значение вручную с помощью regedit или regedt.