2016-04-04 44 views
1

我們正在嘗試使用Apache Camel通過IBM mq發送JMS文本消息。除了JMSPriority,我們可以設置少量的JMS頭部屬性。我們嘗試設置int值並使用resultType =「java.lang.Integer」,但無法更改優先級。任何線索都會更有幫助。駱駝JMS - 無法將JMSPriority設置爲IBM MQ郵件

<route id="mqSender"> 
       <from uri="direct:mqSender"></from> 
       <filter> 
         <simple> ${body} != null</simple> 
         <setProperty propertyName="originalRequest"> 
           <simple> ${body}</simple> 
         </setProperty> 
         <setHeader headerName="JMSCorrelationID"> 
           <simple>${body.messageContextVO.requestID}</simple> 
         </setHeader> 
         <setHeader headerName="VersionId"> 
           <simple>${body.metadata["VersionId"]}</simple> 
         </setHeader> 
         <setHeader headerName="FunctionId"> 
           <simple>${body.metadata["FunctionId"]}</simple> 
         </setHeader> 
         <setHeader headerName="Format"> 
           <simple>${body.metadata["Format"]}</simple> 
         </setHeader> 
         <choice> 
           <when> 
            <simple>${property.originalRequest.metadata["FetchPriorityValue"]}== "true"</simple> 
            <transform> 
              <simple>${body.formattedData}</simple> 
            </transform> 
            <setHeader headerName="JMSPriority"> 
              <simple> ${property.originalRequest.priority}</simple> 
            </setHeader> 

            <camel:setHeader headerName="CamelJmsDestinationName"><simple>queue:///${property.originalRequest.metadata["queueName"]}?targetClient=1</simple></camel:setHeader> 

           </when> 
         </choice> 
         <log message="${property.originalRequest.metadata[queueName]}"></log> 
         <recipientList> 
           <simple>wmq:queue:${property.originalRequest.metadata["queueName"]}?exchangePattern=InOnly</simple> 
         </recipientList> 
         <transform> 
           <simple>${property.originalRequest}</simple> 
         </transform> 
       </filter> 
       <!-- <to uri="bean:trackerUpdateProcessor?method=process" /> --> 
      </route> 

回答

1

我們找到了使其工作的解決方案。優先級屬性需要設置在頭CamelJmsDestinationName 即,

<camel:setHeader headerName="CamelJmsDestinationName"><simple>queue:///${property.originalRequest.metadata["queueName"]}?targetClient=1&amp;priority=${dynamicValue}</simple></camel:setHeader> 

優先權的值發件人代碼檢查在本地代碼MQ目的地等級。 TimeToLive和Priority值需要在MQ目標級別設置爲與Camel一起使用。

+0

您是否嘗試在目標設置上設置targetClient = 1並使用QoS的端點設置? –

+0

是的,但沒有成功。隨着它,設置優先級屬性制定出來。 –

0

我不知道WMQ,但對於正常的JMS組件(我相信駱駝WMQ行爲相同)來設置JMSPriority特定消息端點配置必須有選項「preserveMessageQos」設置爲true

套裝如果要使用消息中指定的QoS設置發送消息,而不是JMS端點上的QoS設置,則爲true。以下三個標題被視爲JMSPriority,JMSDeliveryMode和JMSExpiration。您可以提供全部或部分。如果未提供,則Camel將回退以使用端點中的值。因此,使用此選項時,標題將覆蓋來自端點的值。相比之下,explicitQosEnabled選項僅使用在端點上設置的選項,而不使用消息頭中的值。

+0

我們嘗試啓用preserveQoS。在調試過程中,我們發現即使Camel將這些值設置爲JMS消息,本地mq代碼也會在其中檢查內容。 –