У меня есть следующие настройки:
- Четыре диспетчера очереди MQ в кластере (
QM1
(полное репо), QM2
(полное репо), QM3
(частичное репо),QM4
(частичное репо)) - Все каналы отправителя / получателя кластера имеют одинаковый ранг и приоритет
- каждый администратор очередей имеет некластеризованную очередь псевдонимов (
ALIAS.TO.CLQ
) ALIAS.TO.CLQ
имеет базовый объект ALIAS.TO.FLOW
, который является кластеризованной очередью псевдонимов ALIAS.TO.FLOW
имеет базовый объект L.TO.FLOW
, который является локальной очередью. - Каждый из четырех администраторов очередей настроен как
CLWLUSEQ(ANY)
. - Кластерные очереди псевдонимов имеют
DEFBIND
из NOT FIXED
.Сообщения пишутся с помощью IIB (MQ Output Node), что, я считаю, учитывает это - хотя я наблюдаю то же поведение при использовании MQ Explorer или RFHUtil. - Сообщения помещаются MQ Output Node без указания диспетчера очереди.name
- Каждая из четырех очередей псевдонимов кластера имеет разные
CLWLPRTY
, но одинаковые CLWLRANK
.
Целью этой конфигурации является принудительное получение сообщений, принимаемыходна и та же локальная очередь, независимо от того, в какой администратор очередей изначально помещено сообщение.Если этот администратор очередей недоступен, вместо него следует использовать второй по приоритету приоритет и т. Д.
Проблема, которую я обнаружил, заключается в том, что для трех из четырех администраторов очередей выполняется CLWLPRTY
и сообщениенаправляется в администратор очередей с наивысшим приоритетом.Но в самом администраторе очередей с наивысшим приоритетом сообщение направляется на второй по приоритету приоритет;вместо использования очереди в том же администраторе очередей, который имеет наивысший приоритет.
Если я изменю, какой администратор очередей имеет второй по величине приоритет, сообщение всегда направляется туда от того, который имеет наивысший приоритет -так что это не просто совпадение.Если два экземпляра очереди имеют наивысший приоритет, он никогда не выберет тот же диспетчер очереди, что и сам;всегда кажется, что он предпочитает выходить в кластер.
Что здесь происходит, и как я могу заставить его всегда соблюдать приоритет независимо от того, куда помещено сообщение?Я просмотрел страницу «Алгоритм управления рабочей нагрузкой кластера» в документации IBM (https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.ref.con.doc/q082390_.html), но не могу понять, в чем проблема.
- Обновление -
Я попытался создать новый набор очередей в том же формате, но только на одном из администраторов очередей кластера - так, ALIAS.TEST
-> AL.TEST
(кластер, но существует только один экземпляр) -> L.TEST
. Когда я задаю ALIAS.TEST
, я получаю сообщение об ошибке:
Был выполнен вызов MQOPEN или MQPUT1, указав очередь псевдонимов в качестве цели, но BaseObjectName в определении очереди псевдонимов разрешаетсяв очередь, которая не является локальной или локальным определением удаленной очереди. (AMQ4480) Был выполнен вызов MQOPEN или MQPUT1, в котором в качестве цели указана очередь псевдонимов, но BaseObjectName в определении очереди псевдонимов преобразуется в очередь, котораяне является локальной очередью или локальным определением удаленной очереди. (AMQ4480)
Уровень серьезности: 20 (ошибка)
Ответ: Исправьте определения очереди.
Но я могу поставить тo AL.TEST
очередь без проблем.
- Правка -
OK, ответ на вопрос, почему это происходит, появляется здесь: https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.pro.doc/q003120_.html
Псевдоним не может быть напрямую преобразован в другой псевдоним в том же администраторе очередей.
Итак, как мне получить требуемое поведение?