[英]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&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.