0

此代码重现了该问题:

#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 应该提供更好的错误消息,例如“找不到主机”或仅该行的内容。有什么方法可以启用详细的诊断吗?

4

1 回答 1

1

XMS C/C++ 在内部加载 WebSphere MQ 客户端库。这里的问题是 XMS 无法找到 WebSphere MQ 客户端库libmqm_r.so

令我不解的是代码已设置XMSC_WMQ_CONNECTION_MODEXMSC_WMQ_CM_CLIENT但 XMS 正在尝试加载libmqm_r.so。它应该尝试加载libmqic_r.so.

您是否安装了 WebSphere MQ 客户端?也可以从这里下载 XMSClients 的版本。

于 2014-05-27T11:01:41.160 回答