Camel JMS - 无法将JMSPriority设置为IBM MQ消息

时间:2016-04-04 09:50:26

标签: apache-camel ibm-mq

我们正在尝试使用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>

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

我不确定wmq,但是对于普通的jms组件(我相信camel wmq表现相同)来为特定的消息端点配置设置JMSPriority必须有选项&#34; preserveMessageQos&#34;设为真

  

如果要使用消息上指定的QoS设置发送消息,而不是JMS端点上的QoS设置,则设置为true。以下三个标头被视为JMSPriority,JMSDeliveryMode和JMSExpiration。您可以提供全部或部分内容。如果未提供,Camel将返回使用端点中的值。因此,使用此选项时,标头会覆盖端点的值。相反,explicitQosEnabled选项仅使用在端点上设置的选项,而不使用消息头中的值。