gpt4 book ai didi

c++ - 使用 F5 虚拟 ip 和 C++ 连接 IBM MQ 队列

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:36 29 4
gpt4 key购买 nike

我正在尝试使用 C++ 连接到某些 IBM MQ 队列。这些队列已经定义在不同服务器的不同管理器队列下。这个想法是连接到一个 VIP,它将平衡指向每个服务器的工作负载。

我遇到的问题是我正在使用 cmqc.h 库,为了连接我必须使用 MQCONNMQCONNX,为此我需要队列管理器名称,这是我在连接时无法知道的,由于 F5 平衡器,我不知道将使用哪个。

我当前用作示例的代码如下:

#include <cmqc.h>
#include <cmqxc.h>
#include <string.h>
#include <stdio.h>
#include <sstream>
#include <stdlib.h>
int main()
{
MQHCONN connectionHandle;
MQHOBJ m_SourceQueue;
MQLONG completionCode = 0;
MQLONG reasonCode = 0;

setenv("MQSERVER","SYSTEM.DEF.SVRCONN/TCP/<SERVER_IP_ADDRESS>(56245)",1);
MQCONN(<QUEUE_MANAGER_NAME>, &connectionHandle, &completionCode, &reasonCode);


if(MQCC_OK != completionCode)
{
printf ("%s \n", "Error");
printf ("%s %d \n", "Completion Code", completionCode);
printf ("%s %d \n", "Reason Code", reasonCode);
}
MQDISC(&connectionHandle, &completionCode, &reasonCode);
}

当队列管理器名称不可用时,有人知道如何连接到队列吗?

最佳答案

根据您提供的代码,您可以使用 NULL 或空白,甚至 * 代替队列管理器名称。

例如:

MQCONN("", &connectionHandle, &completionCode, &reasonCode);

MQCONN(" ", &connectionHandle, &completionCode, &reasonCode);

MQCONN("*", &connectionHandle, &completionCode, &reasonCode);

上述任何一个都将连接到队列管理器,该队列管理器监听您在 MQSERVER 环境变量中指定的主机和端口。


MQCONN 记录在 IBM MQ 知识中心页面 MQCONN - Connect queue manager .引用此页面中与队列管理器名称相关的一些内容:

If the name consists entirely of blanks, the name of the default queue manager is used.

MQSERVER 的情况下,默认队列管理器是监听连接到的主机和端口的队列管理器。

该页面在 CCDT 的上下文中也有以下内容,但它对 MQSERVER 的作用相同:

If an all-blank name is specified, each client-connection channel with an all-blank queue-manager name is tried until one is successful; in this case there is no check against the actual name of the queue manager.

Prefixing an asterisk to the connection name implies that the application does not depend on connecting to a particular queue manager in the group. Suitable applications are:

  • Applications that put messages but do not get messages.
  • Applications that put request messages and then get the reply messages from a temporary dynamic queue.

Unsuitable applications are ones that need to get messages from a particular queue at a particular queue manager; such applications must not prefix the name with an asterisk.


我建议您改为使用 CCDT(客户端 channel 定义表),因为它提供了更大的灵 active 。 MQSERVER 只能提供主机、端口和 channel 名称。 CCDT 将允许您配置更多选项,例如 TLS、安全导出、最大消息长度等等。

关于c++ - 使用 F5 虚拟 ip 和 C++ 连接 IBM MQ 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679018/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com