我去了多个站点,对MQ有了一些了解之后,我写了一个Java MQ客户端来读写消息。当我运行客户端代码时,它给出了如下错误:
MQJE001: Completion Code '2', Reason '2540'.
我在其中放置了一条日志语句,并在以下位置显示了异常
private void selectQMgr() throws MQException {
logger.info("qMgrName in selectQMgr method: "+ qMgrName);
qMgr = new MQQueueManager(qMgrName, mqht);
mqht是哈希表引用,其中包含我从脚本传递的主机名,端口和通道属性。
我的系统具有v 7.5 MQ客户端,我使用了所有必需的jar进行编译和运行。
我也转到/ opt / mqm / samp / bin并运行以下命令
• $ amqsput TESTQ QMGR
• Sample AMQSPUT0 start
• MQCONN ended with reason code 2058
• $ MQCONN ended with reason code 2058
上面给出的错误不确定我是否尝试正确。
我是MQ的新手,从下面提到的IBM站点阅读后有点困惑: •不支持队列管理器组。 •没有指定名称的队列管理器组。
从支持团队获得的MQ连接的所有必需属性不确定问题是什么。是我的系统没有连接。
请对此提供帮助。在此先感谢
答案 0 :(得分:1)
有两种连接模型:
绑定模式-当应用程序以绑定模式连接到队列管理器时,该应用程序必须与队列管理器在同一服务器上运行。该应用程序也不指定主机,端口号和通道名称。
客户端模式-意味着应用程序必须指定主机,端口号和通道名称,因为该应用程序与队列管理器不在同一服务器上。
$ amqsput TESTQ QMGR
IBM对可执行文件有一个命名标准:
如果可执行文件不以'c'结尾(即amqsput),则将其编译并链接为绑定模式。即本地队列管理器
如果可执行文件以'c'结尾(即amqsputc),则将其编译并链接为客户端模式。因此,您需要通过设置MQCHLLIB & MQCHLTAB环境变量来使用CCDT文件或设置MQSERVER环境变量。
现在,在远程服务器上,可以有1个或多个正在运行的队列管理器。每个队列管理器将在端口上侦听自己的MQ侦听器。即1414。如果服务器上正在运行3个队列管理器,则使用的端口可能是1414、1415和1416或14001、14002和14003。您将需要向MQAdmin查询该特定队列管理器的正确端口号。 / p>
原因代码2540(MQRC_UNKNOWN_CHANNEL_NAME)表示您使用的队列名未在队列管理器上定义。注意:所有对象均区分大小写。即“ Test.Chl”与“ TEST.CHL”不同。另外,为MQ Reason Code页面添加书签,因为它是您经常需要引用的内容。
最后,由于您不熟悉MQ,我强烈建议您参加MQ Technical Conference(MQTC)。 MQTC是世界上最大的,专门讨论IBM MQ的会议。为期3天的技术培训,价格超低。