WebMQ with SSL in Mulesoft

2019-08-06 19:19发布

I am new to Mulesoft Anypoint Studio and have just started exploring it. My flow starts with reading messages from MQ and ends with putting it at the destination, to begin with just my local machine and would evolve later. I have run into an issue where the Queue has TSL which involves keystores and truststores. Now, in Anypoint I see WMQ and HTTPS/TSL connectors. I've setup a TSL context as global element but how do I set it as part of WMQ connector? The same queue &/or channel can be accessed by Java code with correct TLS settings (keystores, truststores etc.) but in the studion, I am currently getting this exception:

Root Exception was: MQJE001: An MQException occurred: Completion Code 2, Reason 2009 MQJE016: MQ queue manager closed channel immediately during connect Closure reason = 2009. Type: class com.ibm.mqservices.MQInternalException

I haven't come across any sample code for WMQ with TLS while searching on google. Any clues/insights are greatly appreciated.

Thank you in advance!

1条回答
来,给爷笑一个
2楼-- · 2019-08-06 20:01
  1. Create MQQueueConnectionFactory bean as below
<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>
  1. Create UserCredentialsConnectionFactoryAdapter bean and pass above created bean as reference to this.
<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>
  1. Create WMQ connector and pass the appropriate references and values
<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">

  1. Set keystore and truststore locations and passwords in VM arguments as below
-Djavax.net.ssl.trustStore=keystore.jks -Djavax.net.ssl.trustStorePassword=xxxx -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=xxxx

That's it. This should solve WMQ with SSL integration in Mule.

查看更多
登录 后发表回答