gpt4 book ai didi

java - IBM MQ 的深度

转载 作者:行者123 更新时间:2023-11-30 07:56:57 28 4
gpt4 key购买 nike

你能帮帮我吗,我正在尝试通过 SSL channel 使用 PCFAgent 找到 ibm mq 深度。

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
System.setProperty("javax.net.ssl.trustStore","abc-dev.jks");
System.setProperty("javax.net.ssl.trustStorePassword","abcdabcd");

System.setProperty("javax.net.ssl.keyStore", "abc-dev.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "abcdabcd");

MQEnvironment.sslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA";



int attrs[] = { 2016, 3 };
System.out.println("parameter creation");
PCFParameter parameters[] = { new MQCFST(2016, "*"), new MQCFIN(20, 1),
new MQCFIL(1002, attrs) };
String name = null;
Integer depth = null;
System.out.println("parameter creation end");



try {
PCFAgent agent;
if (args.length == 1) {
System.out.print("Connecting to local queue manager " + args[0]
+ "... ");
agent = new PCFAgent(args[0]);
} else {
System.out.print("Connecting to queue manager at " + args[0]
+ ":" + args[1] + " over channel " + args[2] + "... ");
agent = new PCFAgent(args[0], Integer.parseInt(args[1]),
args[2]);
}
System.out.println("Connected.");
System.out.print("Sending PCF request... ");
com.ibm.mq.MQMessage responses[] = agent.send(13, parameters);
System.out.println("Received reply.");
for (int i = 0; i < responses.length; i++) {
MQCFH cfh = new MQCFH(responses[i]);
if (cfh.reason == 0) {
for (int j = 0; j < cfh.parameterCount; j++) {
PCFParameter p = PCFParameter
.nextParameter(responses[i]);
switch (p.getParameter()) {
case 2016:
name = (String) p.getValue();
break;

case 3: // '\003'
depth = (Integer) p.getValue();
break;
}
}

System.out.println("Queue " + name + " curdepth " + depth);
} else {
System.out.println("PCF error:\n" + cfh);
for (int j = 0; j < cfh.parameterCount; j++)
System.out.println(PCFParameter
.nextParameter(responses[0]));

}
}

System.out.print("Disconnecting... ");
agent.disconnect();
System.out.println("Done.");
} catch (ArrayIndexOutOfBoundsException abe) {
System.out
.println("Usage: \n\tjava ListQueueDepth queue-manager\n\tjava ListQueueDepth host port channel");
} catch (NumberFormatException nfe) {
System.out.println("Invalid port: " + args[1]);
System.out
.println("Usage: \n\tjava ListQueueDepth queue-manager\n\tjava ListQueueDepth host port channel");
} catch (MQException mqe) {
System.err.println(mqe);
} catch (IOException ioe) {
System.err.println(ioe);
}

当我尝试远程运行这个程序时,出现以下异常:

com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2035

编辑以从评论中添加额外的澄清细节:

在应用程序收到 2035 的同时,MQ 管理员在 AMQERR01.LOG 中发现了与 SYSTEM.DEFAULT.MODEL.QUEUE 相关的错误。

当我取消安全设置和密码套件时,同一程序适用于非 SSL channel 。

最佳答案

好吧,我没看到您在代码中的什么地方设置了 UserID。因此,您要发送一个空白的用户 ID,如果 channel 的 MCAUSER 为空白,这意味着它会因为旧的安全漏洞而变为“mqm”用户 ID。

对于 MQ v7.1 或更高版本,如果您在“SYSTEM” channel 上,默认的 CHLAUTH 规则将阻止连接。或者对于 MQ v8.0 或更高版本, channel 可能需要用户 ID 和密码。由于 RC 为 2035(未授权),您需要查看事件队列或队列管理器日志。

int attrs[] = { 2016, 3 };
PCFParameter parameters[] = { new MQCFST(2016, "*"),
new MQCFIN(20, 1),
new MQCFIL(1002, attrs) };

此外,硬编码值是什么?你反编译过别人的程序吗?

您为什么不使用 IBM MQ 提供的定义?它应该是这样的:

int[] attrs = {
CMQC.MQCA_Q_NAME,
CMQC.MQIA_CURRENT_Q_DEPTH
};
PCFParameter[] parameters = {
new MQCFST (CMQC.MQCA_Q_NAME, "*"),
new MQCFIN (CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL),
new MQCFIL (CMQCFC.MQIACF_Q_ATTRS, attrs)
};

关于java - IBM MQ 的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41669669/

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