【发布时间】:2017-11-15 23:32:29
【问题描述】:
我的任务是向(目前)未知的 MQ 端点发送测试消息。
我在服务器上安装了 IBM WebSphere MQ (v8.0.0.5) 的试用版,我相信配置正确。
但是,鉴于下面包含的代码,我得到了异常:
“IBM.WMQ.MQException”类型的未处理异常发生在 amqmdnet.dll
附加信息:2059
或者,如果我在服务器本身上使用localhost 而不是远程服务器名称,则构造函数行挂起。
这是 C#:
Hashtable connectionProperties = new Hashtable();
string connectionType = MQC.TRANSPORT_MQSERIES_MANAGED
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType);
// Set up the rest of the connection properties, based on the
// connection type requested
switch (_connectionType)
{
case MQC.TRANSPORT_MQSERIES_BINDINGS:
break;
case MQC.TRANSPORT_MQSERIES_CLIENT:
case MQC.TRANSPORT_MQSERIES_XACLIENT:
case MQC.TRANSPORT_MQSERIES_MANAGED:
connectionProperties.Add(MQC.HOST_NAME_PROPERTY, "server.com");
connectionProperties.Add(MQC.CHANNEL_PROPERTY, "SYSTEM.DEF.CLNTCONN");
break;
}
MQQueueManager qMgr = new MQQueueManager("test", connectionProperties);
MqClientTest mqClientTest=new MqClientTest("TEST_QM","localhost", "SYSTEM.DEF.CLNTCONN");
我们有什么遗漏的吗?
更新 1:
在errors 文件夹的amqerr01.log 文件中,我们现在有了文本:
AMQ6183:发生内部 WebSphere MQ 错误。
更新 2:
“内部 WebSphere MQ 错误”可能是由于我探测 1414 端口以查看该端口是否“启动”并正在侦听。似乎是,而且它显然不喜欢我这样做。
更新 3:
@Roger 建议我使用 127.0.0.1 和大写字母,我现在已经应用了 - 并更改了上面的示例以反映。
@JoshMc 好心地指向队列管理器文件夹中的第二个 AMQERR01.LOG 文件。我现在得到错误:
14/11/2017 15:35:08 - 进程 (336.6) 用户 (xxxx) 程序(amqrmppa.exe) 主机(xxxx) 安装(xxxx) VRMF(8.0.0.5) QMgr(TEST_QM) AMQ9519:未找到通道“SYSTEM.DEF.CLNTCONN”。
解释:请求的操作失败,因为程序可以 找不到频道“SYSTEM.DEF.CLNTCONN”的定义。
TEST_QM 是我的队列管理器,默认 (?) 频道 SYSTEM.DEF.CLNTCONN
【问题讨论】:
-
看起来你还没有使用这个端口。如果您不指定端口号,那么它将采用默认端口,即 1414。
-
是的,正如你所说,我们应该默认使用 1414。花了最长的时间来理解为什么我们没有在 1414 上收听(使用
netstat -a)然后我们找到了一个监听器。所以,我们现在正在收听 1414。 -
1.您指定的频道名称是什么?如果它是以
SYSTEM.开头的频道,那么默认的CHLAUTH规则将阻止它。 2. 如果您没有被该规则阻止,因为您正在使用不同的频道或禁用 CHLAUTH,那么您连接的是哪个用户,如果它是mqm组中的用户或假设您在 Windows 上,任何windows管理员组中的用户,或MUSR_MQADMIN用户,MQ v8默认配置为要求所有管理用户通过CONNAUTH指定密码。 -
注意有两个
AMQERR01.LOG文件,一个位于MQ安装位置正下方的errors目录中,另一个位于MQ安装位置下的qmgrs//errors目录下,你看过第二个位置了吗? -
FDC 文件将在安装目录而不是队列管理器目录下的错误目录中创建。如果探测器只是简单地连接和断开连接,那么通常 MQ 将不再记录任何内容。如果探针连接并且一些意外的数据被发送到 MQ,那么它通常会生成一个 FDC 文件。如果您知道它对应于端口探测,则可以放心忽略。如果它生成太多数据,甚至有办法告诉 MQ 禁止产生这些错误。