Тонкая настройка менеджера очередей (очередь отклонённых сообщений)

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

При создании менеджера очередей для распределённых сред исполнения с использованием WebSphere MQ Explorer необходимо на первом шаге указать значения атрибутов “Очередь передачи по умолчанию” и “Очередь отклонённых сообщений”, если по какой-то причине Вы этого не сделали, то указать эти атрибуты можно после создания менеджера, вызвав свойства и перейдя во вкладки “Дополнительные” и “Связь”. Обратите внимание, что в указанных полях можно указать значение явно, либо выбрать из списка существующих в менеджере очередей. Для хранения отклонённых сообщений в менеджере существует очередь по умолчанию – SYSTEM.DEAD.LETTER.QUEUE, однако если её не указать менеджеру в явном виде, работать с отклонёнными сообщениями менеджер не сможет и это может привести к сбою в распределённых вычислениях.

Для того чтобы раскрыть важность данных действий необходимо пояснить что такое отклонённые сообщения, как их обрабатывает менеджер и к чему может привести не выполнение описанных выше действий. Итак, давайте для начала рассмотрим как происходит обработка сообщений в распределённой среде (кликните на картинке для увеличения):

WMQ-Example-of-a-distributed-environment

В рассматриваемом примере существуют два приложения: Application1, отправляющее сообщения своему партнёру по распределённой обработке в режиме реального времени и Application3, обрабатывающее поступившие к нему сообщения по регламенту (например: запуск приложения происходит раз в 3 часа, обработка длится 20 минут). Приложения работают на менеджерах QM1 и QM3, не имеющих прямого взаимодействия между собой и использующих транзитный менеджер QM2. В случае, если администратор неверно описал Remote Queue в менеджере QM1 возможны следующие ситуации:

1. Неверно указана очередь передачи

При выполнении операции MQOPEN или MQPUT1 Application1 получит код ошибки, сообщение не будет принято менеджером QM1, распределённая обработка отсутствует.

2. Неверно указан менеджер целевой очереди

При выполнении операции MQOPEN или MQPUT1 Application1 получит код успешно выполненной операции, менеджер QM1 примет сообщение и поместит его в Transmission Queue, канальный агент (MCA) на менеджере QM1 считает сообщение и отправит его по каналу связи на менеджер QM2, канальный агент на менеджере QM2 примет сообщение, проанализирует заголовок передачи и попробует поместить сообщение в целевую очередь на целевом менеджере, однако не сможет этого сделать, поскольку администратор неверно указал менеджер целевой очереди. Если в атрибутах менеджер QM2 указана очередь передачи по умолчанию, то сообщение будет помещено в неё, если таковая не определена, то MCA попытается поместить сообщение в очередь отклонённых сообщений, снабдив оригинальное сообщение MQDLH заголовком.

3. Неверно указана целевая очередь

При выполнении операции MQOPEN или MQPUT1 Application1 получит код успешно выполненной операции, менеджер QM1 примет сообщение и поместит его в Transmission Queue, канальный агент (MCA) на менеджере QM1 считает сообщение и отправит его по каналу связи на менеджер QM2, канальный агент на менеджере QM2 примет сообщение, проанализирует заголовок передачи и попробует поместить сообщение в целевую очередь на целевом менеджере, поскольку менеджер QM2 не является целевым, то к заголовку сообщения будет добавлен заголовок передачи (MQXQH) и сообщение будет помещено в очередь передачи. Канальный агент считает сообщение и отправит его по каналу связи в менеджер QM3. Канальный агент на менеджере QM3 примет сообщение, проанализирует заголовок передачи и попробует поместить сообщение в целевую очередь, однако не сможет этого сделать, поскольку администратор неверно её указал. Получив ошибку при выполнении вызова MQOPEN, канальный агент запросит у менеджера имя очереди отклонённых сообщений и попробует поместить сообщение в неё. Если очередь отклонённых сообщений не указана, канальный агент произведёт откат транзакции и сообщение будет восстановлено в очереди передачи на менеджере QM2. Поскольку сообщение было восстановлено в очереди передачи на менеджере QM2, то следующим сообщением отправляемым по каналу будет оно же. Описанная ситуация приведёт к остановке в обработке сообщений, поскольку сообщение будет постоянно передаваться по каналу и не приниматься менеджером QM3.

Обнаружить подобную ситуацию возможно при условии наблюдения за состоянием каналов связи и глубиной очереди передачи, а так же при анализе журнала, в котором менеджеры фиксируют ошибки, возникающие в процессе своей работы. Если администратором были выполнены действия по настройке очереди отклонённых сообщений, то попавшие в неё сообщения могут быть возвращены в обработку с использованием утилиты DLQ Handler. Утилиту можно запускать на основе определенных DLQ критериев, а так же оформив её в виде объекта серверной службы.

В рассматриваемой ситуации под номером 3 сообщения будут помещены в очередь отклонённых сообщений с причиной  MQRC_UNKNOWN_OBJECT_NAME  (2085). Переповторять такие сообщения смысла нет, поскольку они снова будут помещены в очередь отклонённых сообщений, поэтому единственный способ исправить ошибку администратора – это переложить данные сообщения в целевую очередь. Для этого запустим утилиту runmqdlq и подадим ей на вход соответствующий запрос. Последовательность действий для запуска утилиты в пакетном режиме:

1) создать файл rule.txt с правилами и критериями

2) запустить утилиту выполнив команду runmqdlq < rule.txt

Обратите внимание на наличие в правиле директивы HEADER(NO), если её не указать то по умолчанию все сообщения удовлетворяющие условию, а именно, попавшие в очередь по причине неверно указанного имени целевого объекта, будут переброшены в очередь QL на менеджере QM3 с добавленным заголовком MQDLH.

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

Подробно со всеми действиями и критериями можно ознакомиться в соответствующей статье из инфоцентра IBM.

VN:F [1.9.22_1171]
Rating: 5.0/5 (3 votes cast)
Метки: , , ,
Опубликовано в WebSphere MQ, Основы, Тюнинг, Утилиты
1 комментарий на “Тонкая настройка менеджера очередей (очередь отклонённых сообщений)
  1. middleman:

    Тема хорошая но не раскрыта
    Основные проблемы не описаны при отсутствии dlq не описаны
    хандлер не описан

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: