我遇到了一个问题:我需要向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中指定工厂。你能救我吗?
答案 0 :(得分:0)
这里显而易见的问题是&#34;如果您使用动态队列,您如何知道要发送给的队列的名称?&#34;
该问题的明显答案是&#34;它在回复字段中。&#34;
假设刚收到的邮件位于rqstMsg
且您要发送replyMsg
,则可能如下所示:
MessageProducer replyProducer = session.createProducer((Queue rqstMsg.getJMSReplyTo());
// create replyMsge here
replyProducer.send(replyMsg);
您指定&#34;仅发送&#34;所以你有可能不回复请求消息。 (虽然如果是这种情况,您如何确定请求消息上下文之外的动态队列名称是一个有趣的问题。)如果实际上您没有设置ReplyTo字段的消息,您可以指定完全 - 目的地的限定名称:
MQQueue destQ = new MQQueue(rQMName, rName);
Destination dest = (Destination) destQ;
您可以在rQMName中设置远程QMgr名称,在rName中设置远程队列名称,然后正常使用目标。