powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / WebSphere MQ. Менеджеры очередей
8 сообщений из 8, страница 1 из 1
WebSphere MQ. Менеджеры очередей
    #38083905
shax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно разместить сообщение в очередь на одном менеджере и передать в очередь другого менеджера

администратор 1
crtmqm qm.apple

администратор 2
crtmqm -q qm.orange

strmqm
strmqm qm.apple

runmqsc qm.apple
Создадим локальную очередь в apple (получатель) для получения сообщений
define qlocal(q1)
end

runmqsc qm.apple
define listener(qm.apple.listener) trptype(TCP) port(30000)
start listener(qm.apple.listener)
end

runmqsc qm.apple
alter listener(qm.apple.listener) trptype(tcp) ipaddr(127.0.0.1)
end

Создание транспортной очереди в orange (отправитель)
runmqsc qm.orange
define qlocal (qm.orange.tq) usage(xmitq)
end

создание удаленной очереди в orange
runmqsc
define qremote(q1) rname(q1) rqmname(qm.apple) xmitq(qm.orange.tq)
end

runmqsc qm.orange
define channel (qm.orange.qm.apple) chltype (sdr) conname ('127.0.0.1(30000)') xmitq (qm.orange.tq) trptype (tcp)
end

runmqsc qm.apple
define channel (qm.orange.qm.apple) chltype (RCVR) trptype (TCP)
end

запуск канала
runmqsc qm.orange
start channel(qm.orange.qm.apple)
end

Теперь я хочу отправить сообщение в apple.
Заношу сообщение в определение удаленной очереди на orange
./amqsput q1
и далее получаю ошибку

Оба администратора очередей созданы в одной виртуальной машине (ОС Centos)
Что я неправильно делаю при проверке результата
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38090231
shax,

Для начала, какие ошибки выдаются при выполнении amqsput ?
Там возможны варианты.
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38090412
shax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаров, Евгений Хабаров, положить сообщение в очередь получается если указать имя очереди как Q1 (т.е. Q прописывать в большом регистре, хотя у меня она называется и на orange (удаленная) и на apple (локальная) q1 (q - в малом регистре) ). Но я не знаю влияет ли на что нибудь регистр букв, указал наугад т.к. уже не знаю в чем дело.

Проверку результата я делаю так:

Захожу от root
su – root
Переключаюсь на mqm
su – mqm
Захожу в каталог где у меня установлена MQ
cd /opt/mqm/bin
Запускаю отправитель (orange)
./strmqm
Запускаю MQSC для orange
./runmqsc
Запускаю канал отправителя
start channel(qm.orange.qm.apple)
end
Перехожу в каталог с примерами программ
cd /opt/mqm/samp/bin
Размещаю сообщение в удаленную очередь на orange
./amqsput Q1
Сообщение заносится в очередь

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
вообще имя очереди q1, но при написании в малом регистре (./amqsput q1) выпадает следующая ошибка

Sample AMQSPUT0 start
target queue is q1
MQOPEN ended with reason code 2085
unable to open queue for output
Sample AMQSPUT0 end
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Далее тоже самое для apple,
возвращаюсь в каталог с MQ
cd /opt/mqm/bin
запускаю получатель (apple)
./strmqm qm.apple
./runmqsc qm.apple
запускаю канал получателя
start channel(qm.orange.qm.apple)
end
Перехожу в каталог с примерами программ
cd /opt/mqm/samp/bin
И хочу получить сообщение из очереди
./amqsget Q1 (здесь тоже указываю q1 в большом регистре т.к. имена удаленной (на orange) и локальной (на apple) очередей одинаковые)
И получаю ошибку

Sample AMQSGET0 start
MQOPEN ended with reason code 2045
unable to open queue for input
Sample AMQSGET0 end

Попробовал указать при получении сообщения из очереди (на orange - Q1, а на apple - q1) получил ошибку

Sample AMQSGET0 start
MQOPEN ended with reason code 2085
unable to open queue for input
Sample AMQSGET0 end



Оба менеджера у меня установлены в одной ОС Centos.
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38090648
shax,

Предварительно, код 2045 (MQRC_OPTION_NOT_VALID_FOR_TYPE) говорит о том, что идет обращение к очереди с неподходящими параметрами. Т.к. в вызовах програм нигде не указано к какому менеджеру идет подключение, подозреваю что идет работа с дефолтным менеджером на этой машине. Им может быть любой менеджер.
Из за этого может быть и проблема с названиями очередей.
Если этот менеджер не apple и не orange, то это может быть какой-то еще менеджер, на котором заведена очередь Q1.
Выяснить какой менеджер является дефолтным можно например так:
CMDecho DISPLAY QMGR QMNAME | runmqsc
Далее, начинаем анализ.
По каждой команде хотелось бы видеть результат исполнения (лучше приложить файлом/архивом).
Примеры команд привожу для Windows, т.к. Linux-сервера с MQ прямо сейчас под рукой нет.

1. Выясняем версию и фикспак на всякий случайCMD01C:\IBM\WebSphere MQ\tools\c\Samples>dspmqver
Name: WebSphere MQ
Version: 7.0.1.6
CMVC level: p701-106-110725
BuildType: IKAP - (Production)
2. Получаем список серверов MQ.
CMD02C:\IBM\WebSphere MQ\tools\c\Samples>dspmq
QMNAME(apple) STATUS(Running)
QMNAME(orange) STATUS(Running)
3. Получаем список очередей сервера apple (Пример вывода не привожу)
CMD03echo DISPLAY QUEUE(*) | runmqsc apple
4. Получаем список очередей сервера orange (Пример вывода не привожу)
CMD04echo DISPLAY QUEUE(*) | runmqsc orange
5. Отправляем сообщение в очередь q1 на сервере orange
CMD05amqsput a1 orange
6. Читаем ответ из очереди Q1 на сервере apple
CMD06amqsget a1 apple

Если отправка сообщения отработает без ошибок, а в конечной очереди сообщение не появится, будем искать дальше.
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38092856
shax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаров,
Вначале хотел бы у вас уточнить следующий момент. MQ у меня установлена в Centos на VirtualBox. В виртуальной машине у меня установлена ОДНА OC Centos. Т.е. оба менеджера созданы и должны передавать друг другу сообщение в одной системе. Изучал много примеров, но во всех примерах отправитель находится на одном компьютере, а получатель на другом (мне же нужно чтобы передача осуществлялась в одной системе). Свой код писал как раз по этим примерам. Поэтому в связи со всем вышесказанным хотелось бы уточнить это вообще возможно организовать передачу сообщения так как нужно мне (в одной системе).
Один знакомый, косвенно связанный с WebSphere мне сказал что такой вариант возможен если один менеджер будет работать на одном порту, а второй на другом. Но как это сделать он объяснить не смог. В тех примерах которые я изучал (и соответственно у меня в коде) порт указывается на канале отправителя и на получателе запросов (кстати он должен быть у них одинаковым).
Вы пишите «Предварительно, код 2045 (MQRC_OPTION_NOT_VALID_FOR_TYPE) говорит о том, что идет обращение к очереди с неподходящими параметрами.» Т.е. вы имеете ввиду что я неправильно указал параметры локальной очереди на получателе? Но при создании локальной очереди указывается только то что это локальная очередь и ее имя, насколько я понял изучая примеры. (мой код «define qlocal(q1)»).
«подозреваю что идет работа с дефолтным менеджером на этой машине. Им может быть любой менеджер.» Насколько я понимаю дефолтный менеджер - это менеджер по умолчанию. У меня это отправитель (orange). Других менеджеров кроме apple и orange я не создавал.
«Т.к. в вызовах програм нигде не указано к какому менеджеру идет подключение» Не совсе понял этот момент. Когда я запускаю получатель (apple) я ведь указываю его имя, при запуске отправителя (orange) имя не указывал потому что это менеджер по умолчанию.
И я так и не понял влияет ли регистр букв на работу очередей. Есть ли разниц между q1 и Q1. Почему вообще когда я ложу сообщение в очередь и указываю имя очереди q1 выпадает ошибка (2085), а при указании имени как Q1 сообщение заносится в очередь хотя у меня очередь названа q1 (на обоих менеджерах).
Если вас не затруднит разъясните пожалуйста эти вопросы. В администрировании MQ я новичек, а в примерах в основном ответы на простые вопросы особо не разъясняются.
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38093049
shax,

Да, на одной ОС можно создать несколько менеджеров MQ.
Да, даже в пределах одной ОС менеджеры MQ можно объединить между собой.
Порт(ы), через которые возможно подключение к менеджеру задаются с помощью объектов LISTENER.

Для консоли команд (runmqsc) действует следующее правило:
Если имена объектов указываются без кавычек, они приводятся к верхнему регистру.
Если имена объектов указываются в кавычках, то они будут использоваться "как есть".

В прикладных программах нужно указывать имена объектов с учетом регистра.

Внимательно посмотрел скрипты, там есть несколько ошибок.
Во вложении архив с рабочими скриптами. Тестировал на Windows, но должен работать везде.
Каналы передачи созданы в обе стороны, хотя для данного теста достаточно одной пары SDR/RCVR.

cre_apple.cmd, cre_orange.cmd - создание менеджера, запуск менеджера, запуск скриптов создания объектов
cre_apple.txt, cre_orange.txt - скрипты создания объектов
run_tests.cmd - запуск команд amqsput и amqsget

Рекомендую освоить WebSphere MQ Explorer. Это GUI-программа, которая позволяет управлять менеджерами MQ.
Хорошо помогает в процессе обучения и работы, хотя некоторые вещи иногда проще сделать из командной строки.

По теории рекомендую почитать книжку : WebSphere MQ V6. Фундаментальные основы
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38097678
shax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаров, спасибо на моей Centos все запустилось.
Насколько я понял на передачу сообщений между администраторами в одной ОС повлияло именно указание триггерной очереди, т.к. в остальном мой код совпадает с вашим.
define qlocal('orange.dead.queue') - это я так понял очередь для недоставленных сообщений.
define qlocal('orange.defxmit.queue') - а для чего нужна эта очередь?
...
Рейтинг: 0 / 0
WebSphere MQ. Менеджеры очередей
    #38104701
shax,

Помнится, что были ошибки/опечатки. Триггер же только автоматизирует запуск канала.
Для проверки можно попробовать прогнать исходные скрипты, просто заключив имена объектов в одинарные кавычки для сохранения регистра имен объектов.

DEFXMIT - задает очередь передачи по умолчанию, если вдруг она не будет указана явно.
Лучше чтобы такая очередь была, помогает отлавливать ошибки конфигурирования DQM.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / WebSphere MQ. Менеджеры очередей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]