簡體   English   中英

Camel JMS - 無法將 JMSPriority 設置為 IBM MQ 消息

[英]Camel JMS - Unable to set JMSPriority to IBM MQ Message

我們正在嘗試使用 Apache Camel 通過 IBM mq 發送 JMS 文本消息。 除了 JMSPriority 之外,我們可以設置一些 JMS 頭屬性。 我們嘗試設置 int 值並使用 resultType="java.lang.Integer" 但無法更改優先級。 任何線索都會更有幫助。

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

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

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

發送方代碼在本機代碼中檢查 MQ 目標級別的優先級值。 TimeToLive 和 Priority 值需要在 MQ 目標級別設置才能與 Camel 一起使用。

我不確定 wmq,但對於普通的 jms 組件(我相信駱駝 wmq 的行為相同)為特定的消息端點配置設置 JMSPriority 必須將選項“preserveMessageQos”設置為 true

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM