我正在使用适用于 Linux 的 IBM MQ(版本 9.3.0.16)可再发行库在队列管理器和我的示例 C++ 应用程序之间设置通信通道。我的目标是从队列异步获取消息。我可以使用
get()
调用以阻塞方式(在 while 循环内)同步读取消息,从而限制了性能和速度。因此,我需要使用异步方式来读取消息。
根据我的研究,我发现 C++ 类中没有直接函数来异步读取消息或定义回调。然而,我发现有一种方法可以使用基于 C 的方法来实现这一点。
我发现了一个据说可以实现相同任务的实用程序。我已经编译了它,但是当我执行它时,当我使用 MQCB()
函数调用注册回调时出现错误,如下所示:
MQCB ended with reason code: 2012
根据实用程序和ChatGPT,建议将队列管理器中的共享连接参数更改为10,我已经尝试过,但我仍然遇到相同的错误。
下面是包含我正在运行的 .c 代码的要点的 URL: 代码链接
仅供参考,队列管理器正在 Docker 容器中运行,我使用以下 URL 启动并运行该容器: 队列管理器
我没有主意,需要帮助。
我尝试更改共享连接参数,但没有成功。我仍然遇到同样的错误。
您需要使用线程选项进行编译。特别是与 MQ 库的 _r 版本的链接。例如
cc -o myprog myprog.c -L/opt/mqm/lib64 -I/opt/mqm/inc -lmqm_r
如果不这样做,您通常会得到 2012(在客户端模式下运行时)或 2488(在本地绑定模式下运行)。