Код: Выделить всё
com.ibm.mq
mq-jms-spring-boot-starter
3.5.3
var queue = session.createQueue("SYSTEM.ADMIN.COMMAND.QUEUE");
((MQQueue) queue).setIntProperty(WMQConstants.WMQ_MESSAGE_BODY, WMQConstants.WMQ_MESSAGE_BODY_MQ);
((MQQueue) queue).setMQMDWriteEnabled(true);
return queue;
});
try {
BytesMessage msg = (BytesMessage) jmsTemplate.sendAndReceive(inputQueue, ActuatorExtConfig::build);
var bytes = new byte[(int) msg.getBodyLength()];
var bais = new ByteArrayInputStream(bytes);
var dis = new DataInputStream(bais);
var out = new PCFMessage(dis);
out.getParameterValue(CMQCFC.MQCACF_Q_NAMES);
System.out.println(out);
} catch (Exception ex) {
ex.printStackTrace();
}
private static Message build(Session session) {
PCFMessage request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES);
request.addParameter(CMQC.MQCA_Q_NAME, "*");
var baos = new ByteArrayOutputStream();
try (baos; var das = new DataOutputStream(baos)) {
request.write(das);
baos.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
var m = session.createBytesMessage();
m.setJMSPriority(-1);
m.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
m.writeBytes(baos.toByteArray());
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_MSGTYPE, 1);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_FEEDBACK, 0);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_PERSISTENCE, CMQC.MQPER_NOT_PERSISTENT);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_EXPIRY, 300);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_REPORT, CMQC.MQRO_PASS_CORREL_ID);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_ENCODING, CMQC.MQENC_NATIVE);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_CODEDCHARSETID, 1208);
m.setIntProperty(WMQConstants.JMS_IBM_MQMD_PRIORITY, -1);
m.setStringProperty(WMQConstants.JMS_IBM_MQMD_FORMAT, CMQC.MQFMT_ADMIN);
return m;
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
< /code>
Но ответ, который я получаю, в основном пуст < /p>
PCFMessage:
MQCFH (com.ibm.mq.headers.internal.store.ByteStore [encoding: 0x00000111, ccsid: 0, size: 36] @56757931)
MQLONG Type: 0 (0x00000000)
MQLONG StrucLength: 0 (0x00000000)
MQLONG Version: 0 (0x00000000)
MQLONG Command: 0 (0x00000000)
MQLONG MsgSeqNumber: 0 (0x00000000)
MQLONG Control: 0 (0x00000000)
MQLONG CompCode: 0 (0x00000000)
MQLONG Reason: 0 (0x00000000)
MQLONG ParameterCount: 0 (0x00000000)
[/code]
, в то время как тот же запрос, выполненный с PCFMessageAgent , как ниже
Код: Выделить всё
System.setProperty("java.library.path", "/opt/mqm/java/lib64");
System.setProperty("javax.net.ssl.trustStore", props.getJks().getTrustStore());
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", Boolean.FALSE.toString());
MQEnvironment.hostname = "my-host";
MQEnvironment.port = 15003;
MQEnvironment.channel = props.getChannel();
MQEnvironment.sslCipherSuite = props.getSslCipherSpec();
MQEnvironment.userID = props.getUser();
MQEnvironment.password = props.getPassword();
try {
var queueManager = new MQQueueManager(props.getQueueManager());
PCFMessageAgent agent = new PCFMessageAgent(queueManager);
PCFMessage request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES);
request.addParameter(CMQC.MQCA_Q_NAME, "*");
PCFMessage[] responses = agent.send(request);
System.out.println(responses[0]);
queueManager.close();
} catch (Exception e) {
e.printStackTrace();
}
Чего мне не хватает, чтобы он мог работать также с JMS?
Подробнее здесь: https://stackoverflow.com/questions/796 ... e-with-jms