首页 > 解决方案 > 连接到队列管理器 C++ 时出现 MQ 错误 2058

问题描述

目前我正在尝试在 Linux 机器中使用 C++ 和 MQCONNX 函数连接到队列管理器,利用 MQCD 结构设置服务器、通道、传输类型等。编译并运行后,我得到 2058 原因代码(队列经理姓名错误)。

我正在使用以下代码:

extern "C" {
#include <cmqc.h>
#include <cmqxc.h>
}
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;

int main ( int argc, char * * argv ) {
    printf( "TESTING QUEUE MANAGER CONNECTION\n" );
    
    MQHCONN sourceConnectionHandle;    
    MQLONG completionCode = 0;
    MQLONG reasonCode = 0;
    MQCD connectionDescriptor = {MQCD_CLIENT_CONN_DEFAULT};
    connectionDescriptor.TransportType = MQXPT_TCP;
    strcpy(connectionDescriptor.ChannelName, "DEV.APP.SVRCONN");
    strcpy(connectionDescriptor.ConnectionName,"mqprimary(1414)");
    
    MQCNO connectionOptions = {MQCNO_DEFAULT};  
    connectionOptions.ClientConnPtr = &connectionDescriptor;
    
    MQCONNX(" ", &connectionOptions, &sourceConnectionHandle, &completionCode, &reasonCode);
    
    if(MQCC_OK != completionCode)
    {            
        printf("MQCONNX ended with reason code %d connecting to source queue manager.\n", reasonCode);
    }
    else
    {       
        printf ("Connected to Source Queue Manager.\n");
    }
}

我尝试使用 setenv 和 MQCONN 连接到队列管理器,如下所示,不使用 MQCD 结构,并且工作正常,但我需要使用 MQCONNX 和 MQCD 执行此操作:

setenv("MQSERVER","DEV.APP.SVRCONN/TCP/mqprimary(1414)",1);
MQCONN(" ", &sourceConnectionHandle, &completionCode, &reasonCode);

知道为什么使用 MQCONNX 返回 2058 原因代码吗?

在此先感谢您的帮助。

标签: c++ibm-mq

解决方案


MQCD 已添加到 MQCNO 结构的版本 2。您需要设置connectionOptions.Version = MQCNO_VERSION_2(或更高,如果您想使用 CNO 的其他字段)


推荐阅读