Ссылка на проект: https://github.com/ibm-messaging/mq-dev-patterns/blob/master/serverless/codeengine/clientapp/env.json
Я хочу лучше понять этот пример проекта. Вот мои вопросы:
.TAB
, который обычно используется в программах .exe
, и мне нужно перенести его в этот проект. Как я могу это сделать?Я новичок в MQ, и мне нужно руководство, чтобы запустить мой проект. Спасибо.
Я отправил этот проект в механизм кода IBM Cloud, и он работает, но я не могу ничего поместить в нужную очередь или прочитать что-либо из нее. Скорее всего это связано с тем, что конфигурация неправильная.
Этот файл env.json
используется в качестве настроек среды по умолчанию для клиентского приложения. Все значения можно переопределить с помощью настроек среды. Клиентское приложение представляет собой express/node.js, которое предоставляет следующие конечные точки:
Формы используются для запуска/тестирования API. API может использоваться другими приложениями/наблюдателями, чтобы запросить код, чтобы он проснулся и что-то сделал.
Очередь, в которой необходимо выполнить эти действия, находится в
файл env.json
. Если вы хотите изменить код API, чтобы он ожидал имя очереди в качестве входных данных, вы, вероятно, захотите добавить список очередей в формы и передать выбранную очередь конечным точкам API.
Код использует библиотеку IBM MQ node.js ibmmq
и использует пользователя и пароль приложения в качестве учетных данных приложения для администратора очередей, к которому оно подключается.
MODEL_QUEUE_NAME
и DYNAMIC_QUEUE_PREFIX
на самом деле не используются в коде, но сохраняются для создания маршрутов, которые запускают действие запроса/ответа. Для чего нужна модель очереди для создания динамических временных очередей.
Что касается конфигурации MQIPT, CONNAME, который вы используете для подключения клиента, должен указывать на MQIPT, а если вы используете TLS, клиент должен доверять сертификату MQIPT. Итак, вы должны использовать имя хоста и порт MQIPT в своем env.json, а если вы используете TLS, вам нужно будет заполнить хранилища ключей соответствующими сертификатами.
Образец CodeEngine, похоже, не включает поддержку CCDT, но лежащая в его основе библиотека MQ Node.JS экспортирует CCDTurl. Вам нужно будет изменить функцию buildCNO()
в mqclient.js
, чтобы пропустить код, который создает и устанавливает mq.MQCD()
так же, как это сделано в примере Basicget.js.
например. Этот бит логики пропускается, если используется CCDT.
if (! ccdtCheck()) {
debug_info('CCDT URL export is not set, will be using json envrionment client connections settings for %s', MQDetails['QMGR']);
// And then fill in relevant fields for the MQCD
let cd = new mq.MQCD();
cd.ConnectionName = `${MQDetails.HOST}(${MQDetails.PORT})`;
cd.ChannelName = MQDetails.CHANNEL;
debug_info('Connection is ', cd.ConnectionName);
if (MQDetails.KEY_REPOSITORY) {
debug_info('Will be running in TLS Mode');
cd.SSLCipherSpec = MQDetails.CIPHER;
cd.SSLClientAuth = MQC.MQSCA_OPTIONAL;
}
// Make the MQCNO refer to the MQCD
cno.ClientConn = cd;
}
Мне интересно, отвечали ли вы на вопрос о файле .TAB, указывая на экспорт CCDTurl и на то, как изменить функцию buildCNO()
. Если это правда, что вы обращались к вопросу о файле .TAB, я не уверен, что понял, как помогает пропуск настройки mq.MQCD()
и создание. Разве мне не понадобятся значения в файле .TAB для подключения к MQIPT?
Что касается значений «HOST» и «PORT» в файле env, а также соединения TLS, нужно ли мне просто заполнить правильные файлы .sth
и .kdb`?
RE: Пользователь и пароль приложения, если они вам понадобятся, будут зависеть от того, как настроен администратор очередей на другой стороне MQIPT. Если вам их не предоставили, возможно, и нет, но если вы видите ошибки 2035, возможно, они есть. Если вы этого не сделаете, вам следует изменить код, чтобы не использовать их.
RE пропускает раздел mq.MQCD() и не требует установки HOST
и PORT
, см. дополнение к ответу. Они не нужны, поскольку эти значения берутся из файла CCDT.
Большое спасибо за ваш ответ. Это помогает прояснить многие вопросы, которые у меня были. У меня есть несколько дополнительных вопросов, и я буду публиковать их по одному комментарию за раз. Что касается входящих и исходящих очередей, предлагаете ли вы передать имя очереди в качестве параметра, а не определять как одну константу env? И тем самым я смогу добиться поддержки нескольких очередей? Что касается значений «APP_USER» и «APP_PASSWORD», нужны ли они мне, если я подключаюсь к удаленному MQIPT, а не напрямую к диспетчеру очередей?