Этот код воспроизводит проблему:
#include <iostream>
#include <xms.hpp>
int main()
{
try
{
xms::ConnectionFactory factory;
factory.setIntProperty(XMSC_CONNECTION_TYPE, XMSC_CT_WMQ);
factory.setIntProperty(XMSC_WMQ_CONNECTION_MODE, XMSC_WMQ_CM_CLIENT);
factory.setStringProperty(XMSC_WMQ_QUEUE_MANAGER, "my.queue.manager");
factory.setStringProperty(XMSC_WMQ_HOST_NAME, "my.dev.mq");
factory.setStringProperty(XMSC_WMQ_CHANNEL, "my.channel");
factory.setIntProperty(XMSC_WMQ_PORT, 1414);
std::cout << "Is Factory Null? => " << factory.isNull() << std::endl;
xms::Connection conn = factory.createConnection(); //THIS THROWS EXCEPTION
std::cout << "Is Factory Null? => " << factory.isNull() << std::endl;
}
catch(xms::Exception const & e)
{
e.dump(std::cout);
}
}
Выдает исключение, выводит следующее сообщение:
Is Factory Null? => 0
Exception:
ErrorData =
ErrorCode = 26 (XMS_E_CONNECT_FAILED)
JMS Type = 1 (XMS_X_GENERAL_EXCEPTION)
Linked Exception:
ErrorData = libmqic_r.so
ErrorCode = 0 (XMS_E_NONE)
JMS Type = 1 (XMS_X_GENERAL_EXCEPTION)
Есть идеи, что не так с кодом?
Обратите внимание, что devpmmq
это просто псевдоним фактического IP-адреса (хоста). Если я поставлю любой случайное / бессмысленное значение для него, я получаю ту же ошибку, что плохо, потому что API должен был дать лучшее сообщение об ошибке, такое как «Хост не найден» или что-то в этом роде. Есть ли способ включить Больше подробная диагностика?
XMS C / C ++ внутренне загружает клиентские библиотеки WebSphere MQ. Проблема в том, что XMS не может найти клиентскую библиотеку WebSphere MQ libmqm_r.so
,
Что меня озадачивает то, что код установил XMSC_WMQ_CONNECTION_MODE
как XMSC_WMQ_CM_CLIENT
но XMS пытается загрузить libmqm_r.so
, Он должен был попытаться загрузить libmqic_r.so
,
Вы установили клиент WebSphere MQ? Также какая версия XMSClients может быть загружена с Вот.