IBM MQ使用amqsgetc失败,原因为“ 2058”

时间:2019-04-24 13:54:31

标签: ibm-mq

运行GET示例amqsget时,我可以在队列中正常连接...

C:\Program Files\IBM\MQ\bin>amqsget QUEUE1
Sample AMQSGET0 start
no more messages
Sample AMQSGET0 end

但是在使用 amqsgetc 时出现错误“ MQCONNX以原因代码2058结尾”

C:\Program Files\IBM\MQ\bin>amqsgetc QUEUE1
Sample AMQSGET0 start
MQCONNX ended with reason code 2058

在末尾显式添加队列管理器也无法正常工作。

IBM的article总结了问题原因,但仍不清楚为什么一个起作用而另一个不起作用。 other article解释了示例程序。

2 个答案:

答案 0 :(得分:3)

amqsget 将使用共享内存管道连接到本地计算机上的队列管理器。这意味着只要它与队列管理器在同一台计算机上,它就可以找到队列管理器并连接到它。

amqsgetc 将通过网络连接到队列管理器。因为默认情况下,它不知道队列管理器在哪里,所以您需要告诉它如何连接到队列管理器。您可以通过以下三种方式之一告诉amqsgetc(或任何客户端应用程序)如何连接队列管理器:

  1. 以编程方式。如果您有自定义应用程序,则可以编写连接详细信息以对其进行硬编码。 这不是amqsgetc的选项。
  2. MQSERVER环境变量。如果设置此环境变量,则amqsgetc将获取所需的详细信息。该变量的格式应为:<Channel>/<Network Protocol, most likely TCP>/<address>(<port>),例如Channel1/TCP/localhost(1414)This page包含有关MQSERVER的更多详细信息。
  3. CCDT文件。如果创建CCDT文件,则amqsgetc可以选择此文件以查找所需的连接详细信息。有关CCDT文件here
  4. 的更多信息

答案 1 :(得分:2)

以'c'结尾的示例程序与MQ客户端库而不是服务器库链接。因此,它们通过网络连接(通常是TCP)而不是共享内存进行连接。

您链接到的文章提供了有关在确定如何到达远程队列管理器时使用的优​​先级顺序的更多信息,但总而言之,客户端很可能不知道如何联系队列管理器。

您将需要通过连接CCDT或使用MQSERVER environment variable来告知客户端用于连接队列管理器的连接详细信息。

相关问题