Apache camel 驼峰JMS-无法将JMSPriority设置为IBM MQ消息

Apache camel 驼峰JMS-无法将JMSPriority设置为IBM MQ消息,apache-camel,ibm-mq,Apache Camel,Ibm Mq,我们正在尝试使用ApacheCamel通过IBMMQ发送JMS文本消息。除了JMSPriority之外,我们可以设置几个JMS头属性。我们尝试设置int值并使用resultType=“java.lang.Integer”,但无法更改优先级。任何线索都会非常有用 <route id="mqSender"> <from uri="direct:mqSender"></from> <filt

我们正在尝试使用ApacheCamel通过IBMMQ发送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>

${body}!=无效的
${body}
${body.messageContextVO.requestID}
${body.metadata[“VersionId”]}
${body.metadata[“FunctionId”]}
${body.metadata[“Format”]}
${property.originalRequest.metadata[“FetchPriorityValue”]}==“true”
${body.formattedData}
${property.originalRequest.priority}
队列://${property.originalRequest.metadata[“queueName”]}?targetClient=1
wmq:queue:${property.originalRequest.metadata[“queueName”]}?exchangePattern=InOnly
${property.originalRequest}

我们找到了解决方案,使其正常工作。需要在标头CamelJmsDestinationName处设置优先级属性 i、 e

queue://${property.originalRequest.metadata[“queueName”]}?targetClient=1&;优先级=${dynamicValue}

发送方代码检查本机代码中MQ目标级别的优先级值。需要在MQ目标级别设置TimeToLive和Priority值才能使用Camel

我不确定wmq,但对于普通jms组件(我相信wmq的行为也一样),为特定消息端点配置设置JMSPriority必须将选项“preserveMessageQos”设置为true

如果要使用消息上指定的QoS设置而不是JMS端点上的QoS设置发送消息,请将设置为true。以下三个头被认为是JMSPriority、JMSDeliveryMode和JMSExpiration。您可以提供全部或仅提供其中的一部分。如果没有提供,Camel将返回使用端点的值。因此,当使用此选项时,标头将覆盖端点的值。相反,explicitQosEnabled选项将只使用在端点上设置的选项,而不使用来自消息头的值


我们尝试启用QoS。在调试过程中,我们发现即使Camel将这些值设置为JMS消息,本机mq代码也会覆盖其中包含check的内容。在JMS客户机级别的端点上设置preserveMessageQos=true可以保留和配置JMSPriority。在所有消息之前,即使在我设置消息头中的值时,JMSPriority也被设置为4。现在,默认优先级为0,除非您专门将标头值设置为所需的值。是否尝试在目标设置中仅设置targetClient=1,并使用端点设置实现QoS?是,但没有成功。同时,设置优先级属性也起到了作用。
<camel:setHeader headerName="CamelJmsDestinationName"><simple>queue:///${property.originalRequest.metadata["queueName"]}?targetClient=1&amp;priority=${dynamicValue}</simple></camel:setHeader>