使用 JMS 连接到 IBM MQ

Posted

技术标签:

【中文标题】使用 JMS 连接到 IBM MQ【英文标题】:Using JMS to connect to IBM MQ 【发布时间】:2011-01-20 09:50:02 【问题描述】:

我想。 如何指定 queuemanager、channel 和其他属性?

【问题讨论】:

【参考方案1】:

使用 JNDI 进行 connectionFactory/destinations 查找,为 InitialContext 提供以下属性:

java.naming.provider.url=<ip>:<port, default is 1414>/<channel name, default channel is SYSTEM.DEF.SVRCONN>
java.naming.factory.initial=com.ibm.mq.jms.context.WMQInitialContextFactory
java.naming.security.authentication=none
java.naming.security.credentials=
java.naming.security.principal=

使用WAS(Websphere Application Server)队列,属性如下:

java.naming.provider.url=iiop://<ip>:<port, the defualt is 2809>
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
java.naming.security.authentication=none
java.naming.security.credentials=
java.naming.security.principal=

剩下的如下:

Properties config = new Properties();
config.load(new FileInputStream("connectionConfig.properties"));// this file would contain the properties above
InitialContext context = new InitialContext(config);
ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");// connection factory name
Destination destination = (Destination) context.lookup("destination");// queue/topic name

【讨论】:

我在任何地方都找不到 com.ibm.websphere.naming.WsnInitialContextFactory,求助【参考方案2】:

您需要创建一个 MQQueueConnectionFactory bean 并在其中设置所需的属性。

<bean id="queueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="transportType" ref="transport" />
    <property name="queueManager" value="queueManagerName" />
    <property name="hostName" value="hostName" />
    <property name="port" value="portNumber" />
    <property name="channel" value="channelName" />
</bean>
<bean id="transport"
    class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="staticField">
        <value>
            com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP
        </value>
    </property>
</bean>

【讨论】:

【参考方案3】:

这里的a tutorial 可能会有所帮助:

另外,请务必使用正确版本的 WMQ 的文档。 V7.0 是最新的,并且在 2011 年 9 月之前支持 v6.0。无论您使用哪个版本,请查看使用 Java 手册以获取正确的版本:

v6.0 manualv7.0 manual

【讨论】:

【参考方案4】:

使用 IBM 客户端 API

            import com.ibm.mq.MQEnvironment;
            import com.ibm.mq.MQQueue;
            import com.ibm.mq.MQQueueManager;
            import com.ibm.mq.constants.CMQC;

            public class QueueMonitoring 

                public static void main(String[] args) 
                    int openOptions = CMQC.MQOO_INQUIRE | CMQC.MQOO_INPUT_AS_Q_DEF;
                    MQEnvironment.hostname = "192.168.59.103";
                    MQEnvironment.port = 1414;
                    MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
                    MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY,CMQC.TRANSPORT_MQSERIES);

                    MQQueueManager qMgr;
                    try 
                        qMgr = new MQQueueManager("QM1");
                        MQQueue destQueue = qMgr.accessQueue("DOCKERQ", openOptions);
                        System.out.println("Queue size:" + destQueue.getCurrentDepth());
                        destQueue.close();
                        qMgr.disconnect();

                     catch (Exception e) 
                        e.printStackTrace();
                    

                
                

【讨论】:

【参考方案5】:

最好的方法是使用命令行。太有趣了。您可以从http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/csqzaj05.pdf下载命令参考书

如果您的 MQ 服务器在 Windows 机器上运行,您可以选择使用 MQExplorer 并以图形方式对其进行配置。

【讨论】:

以上是关于使用 JMS 连接到 IBM MQ的主要内容,如果未能解决你的问题,请参考以下文章

com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”

C++ 客户端通过 SSL 连接到 IBM MQ

在同一个应用程序中使用 ActiveMQ 5 和 IBM MQ 8

使用 MQClient java 和 MQExplorer 错误 JMSWMQ2013 将 JMS 连接到 MQ

连接到 IBM Websphere MQ 时出现 NullPointerException

无法使用 Spring Boot 连接到具有多个 SSL 证书的多个 IBM MQ 通道