Apache camel 删除“;队列://";来自目标名称Apache Camel+;IBM MQ
使用apache camel,我将mesasge发送到IBM队列Apache camel 删除“;队列://";来自目标名称Apache Camel+;IBM MQ,apache-camel,jms,ibm-mq,Apache Camel,Jms,Ibm Mq,使用apache camel,我将mesasge发送到IBM队列Q001IN,但在另一端,应用程序正在验证目标,他们希望目标为Q001IN,但他们接收的是queue:///Q001IN 而不是Q001IN ... .to("jms:Q001IN") .end() 是否仍然可以覆盖此以删除队列:// 我在下面试过,但不起作用 .setHeader("destination", simple("QUEUE_NAME")) .setHeader("destinationName", simple("
Q001IN
,但在另一端,应用程序正在验证目标,他们希望目标为Q001IN
,但他们接收的是queue:///Q001IN 而不是Q001IN
...
.to("jms:Q001IN")
.end()
是否仍然可以覆盖此以删除队列://
我在下面试过,但不起作用
.setHeader("destination", simple("QUEUE_NAME"))
.setHeader("destinationName", simple("QUEUE_NAME"))
.to("jms:Q001IN")
确切地说,接收器应用程序接收一个对象a。您看到的“queue://”是该对象的toString()。如果要获取队列名称,必须(很遗憾)将目标对象强制转换为
javax.jms.queue
,然后使用方法queue.getQueueName()
。我不确定您的接收应用程序,但假设dest包含您收到的消息的JMS目标:
import javax.jms.Queue
Queue q = (Queue)dest;
String qName = q.getQueueName();
我认为其他应用程序正在使用IBM MQ特定的API和头。这就是他们只能检索队列名称的原因。如果我使用下面的命令发送消息,他们可以在不使用队列的情况下接收队列名称:///
Hashtable<String, Object> properties = new Hashtable<String, Object>();
properties.put(MQConstants.HOST_NAME_PROPERTY, HOST);
properties.put(MQConstants.PORT_PROPERTY, new Integer(PORT));
properties.put(MQConstants.CHANNEL_PROPERTY, CHANNEL);
MQQueueManager queueManager = new MQQueueManager(QUEUE_MANAGER, properties);
int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT;
com.ibm.mq.MQQueue ibmQueue = queueManager.accessQueue(QUEUE_NAME, openOptions);
MQMessage msg = new MQMessage();
MQRFH2 rfh2 = new MQRFH2();
rfh2.setFieldValue("mcd", "Msd", "jms_text");
rfh2.setFieldValue("jms", "Dst", QUEUE_NAME);
rfh2.write(msg);
msg.writeString("This is using IBM API : " + System.currentTimeMillis() % 1000);
msg.format = CMQC.MQFMT_RF_HEADER_2;
MQPutMessageOptions pmo = new MQPutMessageOptions();
ibmQueue.put(msg, pmo);
并尝试将destination case设置为queue,并获取我获得的队列名称
队列://
下面是输出
This is using JMS API456
JMSDestination : queue:///<Queue_Name>
这是使用jmsapi456
JMSDestination:队列:///
当我尝试浏览两条消息时,一条使用jms发送,另一条使用ibm mq发送
如下所示,两者的目的地都不同
这里没有了解情况。“另一端”必须接收您写入队列的消息,而不是队列名称本身,对吗?是的,没错,他们正在接收消息,但为了验证消息,他们正在使用“((队列)getJMSDestination).getQueueName()检查消息是否来自有效队列,
This is using JMS API456
JMSDestination : queue:///<Queue_Name>