Apache camel 驼峰JMS-无法将JMSPriority设置为IBM MQ消息
我们正在尝试使用ApacheCamel通过IBMMQ发送JMS文本消息。除了JMSPriority之外,我们可以设置几个JMS头属性。我们尝试设置int值并使用resultType=“java.lang.Integer”,但无法更改优先级。任何线索都会非常有用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
<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&priority=${dynamicValue}</simple></camel:setHeader>