我是Mulesoft Anypoint Studio的新手,并且刚刚开始探索它。我的流程从读取MQ消息开始,最后将其放在目标位置,从我的本地机器开始,然后会发展。我遇到了一个问题,即队列具有涉及密钥库和信任库的TSL。现在,在Anypoint中,我看到了WMQ和HTTPS / TSL连接器。我已经将TSL上下文设置为全局元素,但是如何将其设置为WMQ连接器的一部分呢? Java代码可以使用正确的TLS设置(密钥库,信任库等)访问相同的队列和/或通道,但是在studion中,我当前遇到此异常:


  根异常为:MQJE001:发生MQException:完成代码2,原因2009
  MQJE016:连接期间,MQ队列管理器立即关闭了通道
  关闭原因=2009。类型:类com.ibm.mqservices.MQInternalException


在Google上搜索时,我还没有遇到带有TLS的WMQ的任何示例代码。任何线索/见解将不胜感激。

先感谢您!

最佳答案

创建如下的MQQueueConnectionFactory bean
  


<spring:bean id="MQConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
           <spring:property name="hostName" value="${hostName}"/>
           <spring:property name="port" value="${port}"/>
           <spring:property name="channel" value="${channel}"/>
           <spring:property name="queueManager" value="${queueManager}"/>
           <spring:property name="SSLCipherSuite" value="${SSLCipherSuite}"/>
           <spring:property name="targetClientMatching" value="true" />
           <spring:property name="transportType" value="1" />
        </spring:bean>



  
  创建UserCredentialsConnectionFactoryAdapter bean,并在创建的bean上方传递对此的引用。
  


<spring:bean id="jmsQueueConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
        <spring:property name="targetConnectionFactory" ref="MQConnectionFactory" />
        <spring:property name="username" value="${username}" />
        <spring:property name="password" value="${password}" />
    </spring:bean>



  
  创建WMQ连接器并传递适当的引用和值
  


<wmq:connector name="WMQConnector"
              hostName="${hostName}"
              port="${port}"
              queueManager="${queueManager}"
              channel="${channel}"
              transportType="CLIENT_MQ_TCPIP"
              validateConnections="true"
              doc:name="WMQ"
              password="${password}"
              username="${username}"
              dynamicNotification="true"
              numberOfConsumers="1"
              connectionFactory-ref="MQConnectionFactory"
              cacheJmsSessions="false"
              specification="1.1"
              targetClient="JMS_COMPLIANT"
              acknowledgementMode="CLIENT_ACKNOWLEDGE"
              maxRedelivery="-1">





  
  如下所示在VM参数中设置密钥库和信任库位置以及密码
  


-Djavax.net.ssl.trustStore=keystore.jks -Djavax.net.ssl.trustStorePassword=xxxx -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=xxxx


而已。这应该可以解决Mule中带有SSL集成的WMQ。

09-27 00:29