【问题标题】:wso2esb & WMQ 7.5wso2esb 和 WMQ 7.5
【发布时间】:2014-04-15 11:43:56
【问题描述】:

我有一个问题:我需要向 IBM MQ 7.5 发送消息(仅发送)。在我的情况下,我在几个管理器上有很多动态队列,因此无法通过 jndi 发送消息(如 wso2 doc 中所述)。 IBM MQ 有一个 jms 扩展,我可以在其中通过指定 q 名称(例如“queue://QM1/qName1”)直接向队列管理器和队列发送消息。但要做到这一点,我需要像这样指定连接工厂

<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="port" value="${mq.port}"/>
        <property name="transportType" value="${mq.transportType}"/>
        <property name="hostName" value="#{props['host']}"/>
        <property name="queueManager" value="#{props['mq.manager']}"/>
        <property name="channel" value="#{props['mq.chanel']}"/>
    </bean>

但我没有找到如何在 wso2esb 中指定工厂。你能帮帮我吗?

【问题讨论】:

    标签: wso2esb ibm-mq


    【解决方案1】:

    这里明显的问题是“如果您使用动态队列,您如何知道要发送到的队列的名称?”

    这个问题的明显答案是“它在回复字段中”。

    假设刚刚收到的消息在rqstMsg,而你想发送replyMsg,它可能看起来像这样:

    MessageProducer replyProducer = session.createProducer((Queue rqstMsg.getJMSReplyTo());
    // create replyMsge here
    replyProducer.send(replyMsg);
    

    您指定了“仅发送”,因此您可能没有回复请求消息。 (虽然如果是这种情况,如何在请求消息的上下文之外确定动态队列名称是一个有趣的问题。)如果事实上您没有设置了回复字段的消息,您可以只指定完全-目的地的限定名称:

    MQQueue destQ = new MQQueue(rQMName, rName);
    Destination dest = (Destination) destQ;
    

    您可以在 rQMName 中设置远程 QMgr 名称,在 rName 中设置远程队列名称,然后照常使用目标。

    【讨论】:

    • 我不能这样做,因为在 wso2esb 中我可以像这些 com.sun.jndi 为 IBM MQ 定义发件人.fscontext.RefFSContextFactory。对于您的代码,我需要另一个连接工厂
    • 它是 Java。您可以从头开始实例化任何对象,并使用构造函数和 setter 方法正确填充它。管理对象是一种方便,但根本不是必需的。查找 nojndi 示例并阅读IBM WebSphere Developer Technical Journal: Running a standalone Java application on WebSphere MQ V6.0,其中也有示例代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2014-04-05
    相关资源
    最近更新 更多