Apache camel 删除“;队列://";来自目标名称Apache Camel+;IBM MQ

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("

使用apache camel,我将mesasge发送到IBM队列
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>