我们正在尝试使用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>
答案 0 :(得分:1)
我们找到了使其有效的解决方案。要在标头CamelJmsDestinationName中设置优先级属性 即,
<camel:setHeader headerName="CamelJmsDestinationName"><simple>queue:///${property.originalRequest.metadata["queueName"]}?targetClient=1&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选项仅使用在端点上设置的选项,而不使用消息头中的值。