日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

jms java client mq_将Java客户端(JMS)连接到IBM MQ时出现问题

發(fā)布時間:2023/12/2 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jms java client mq_将Java客户端(JMS)连接到IBM MQ时出现问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我正在嘗試使用基本上通過以下方式構(gòu)建的Java客戶端使用SSL消耗IBM MQ(版本8.0.0.8):

Oracle JKD 8和IBM JRE 7(出于測試目的,我每個都有一個客戶端)

com.ibm.mq.allclient-9.1.0.0.jar

javax.jms-api-2.0.1.jarspring-jms-4.3.7.RELEASE.jar

spring-jms-4.3.7.RELEASE.jar

MQ是一種請求/答復(fù)類型。

我已經(jīng)設(shè)置了正確的證書和所有MQ屬性,但是由于某種原因,連接“掉線了”,并且客戶端沒有錯誤,我的請求從未得到任何響應(yīng),并且一直“永遠”運行,從未得到任何響應(yīng)。我唯一的線索是MQ日志中的錯誤消息,內(nèi)容為:

Process(31600.16) User(QMQM) Jobname(JOB_NAME)

Host(HOST_NAME)

VRMF(8.0.0.8) QMgr(MANAGER_NAME)

AMQ9638: SSL communications error for channel

‘CHANNEL_NAME’. EXPLANATION:

Cause . . . . . : An unexpected SSL communications error occurred

for a channel, as reported in the preceding messages. The

channel is ‘CHANNEL_NAME’;

奇怪的是發(fā)生了SSL握手,我的證書被MQ接受了,但是由于某些原因在此之后發(fā)生了某些事情。我正在嘗試同時使用Oracle JRE 8和IBM

JRE7。也許是MQ方面的某些東西(IBM MQ v8.0.0.8)或我缺少的某些配置。

我已經(jīng)安裝了JCE無限策略,所以問題不是CipherSpec X CipherSuite。

我正在使用-Djavax.net.debug = all,可以看到我的證書被正確使用,并且在那里看不到任何問題…

我在MQ團隊的聯(lián)系點告訴我,由于某種原因,我的應(yīng)用程序正在吊銷證書(與CLR有關(guān)的事情),但是我不知道為什么會發(fā)生這種情況。

我的Java代碼:

public Message callMQ() {

Message message = null;

try {

MQConnectionFactory factory = mqQueueConnectionFactory();

JMSContext context = factory.createContext();

Destination requestQueue = context.createQueue("queue:///REQUEST_QUEUE");

Destination replyQueue = context.createQueue("queue:///REPLY_QUEUE");

JmsTemplate jmsTemplate = new JmsTemplate(factory);

FIXMLRootInbound inbound = new FIXMLRootInbound();

String xml = XmlUtil.xmlObjectToString(inbound);

message = jmsTemplate.sendAndReceive(requestQueue,

session -> {

Message req = session.createTextMessage(xml);

req.setJMSCorrelationID(UUID.randomUUID().toString());

req.setJMSDestination(requestQueue);

req.setJMSReplyTo(replyQueue);

return req;

});

} catch (Throwable e) {

e.printStackTrace();

}

return message;

}

private MQConnectionFactory mqQueueConnectionFactory() throws NoSuchAlgorithmException, KeyStoreException,

IOException, CertificateException, UnrecoverableKeyException, KeyManagementException, JmsException {

SSLSocketFactory sslSocketFactory = sslContext().getSocketFactory();

MQEnvironment.sslSocketFactory = sslSocketFactory;

MQEnvironment.sslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA";

MQEnvironment.sslFipsRequired = false;

MQConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();

mqQueueConnectionFactory.setHostName(host);

try {

mqQueueConnectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);

mqQueueConnectionFactory.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE,

WMQConstants.WMQ_CM_CLIENT);

mqQueueConnectionFactory.setQueueManager(queueManager);

mqQueueConnectionFactory.setSSLCipherSuite("TLS_RSA_WITH_AES_256_CBC_SHA");

mqQueueConnectionFactory.setCCSID(285);

mqQueueConnectionFactory.setChannel(channel);

mqQueueConnectionFactory.setPort(port);

mqQueueConnectionFactory.setSSLSocketFactory(sslSocketFactory);

mqQueueConnectionFactory.setSSLFipsRequired(false);

} catch (Exception e) {

log.error("Error creating MQQueueConnectionFactory.", e);

}

return mqQueueConnectionFactory;

}

private SSLContext sslContext() throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {

try (InputStream cert = new FileInputStream("C:\\myplace\\Dev\\Certificates\\MY_KEYSTORE.jks")) {

final KeyStore caCertsKeyStore = KeyStore.getInstance("JKS");

caCertsKeyStore.load(cert, "changeit".toCharArray());

final KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");

PKIXRevocationChecker rc = (PKIXRevocationChecker)cpb.getRevocationChecker();

rc.setOptions(EnumSet.of(

PKIXRevocationChecker.Option.PREFER_CRLS,

PKIXRevocationChecker.Option.ONLY_END_ENTITY,

PKIXRevocationChecker.Option.SOFT_FAIL,

PKIXRevocationChecker.Option.NO_FALLBACK));

PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(caCertsKeyStore, new X509CertSelector());

pkixParams.addCertPathChecker(rc);

kmf.init(caCertsKeyStore, "changeit".toCharArray());

tmf.init( new CertPathTrustManagerParameters(pkixParams) );

final SSLContext sslContext = SSLContext.getInstance("TLS");

sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());

return sslContext;

} catch (Exception e) {

throw new RuntimeException("Exception creating SSLContext", e);

}

}

總結(jié)

以上是生活随笔為你收集整理的jms java client mq_将Java客户端(JMS)连接到IBM MQ时出现问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。