2016-04-04 31 views
1

ApacheのCamelを使用してIBMのmqでJMSテキストメッセージを送信しようとしています。 JMSPriority以外のJMSヘッダープロパティはほとんど設定できません。 int型の値を設定しようとしましたが、resultType = "java.lang.Integer"を使用しましたが、優先度を変更できませんでした。どんな手がかりも役立ちます。Camel JMS - JMSPriorityをIBM MQメッセージに設定できません

<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> 

答えて

1

解決策を見つけました。 priority属性は、ネイティブコードでMQ宛先レベルで、ヘッダCamelJmsDestinationName すなわちにおける優先順位の値の

<camel:setHeader headerName="CamelJmsDestinationName"><simple>queue:///${property.originalRequest.metadata["queueName"]}?targetClient=1&amp;priority=${dynamicValue}</simple></camel:setHeader> 

センダコードチェックを設定する必要があります。 TimeToLiveとPriorityの値は、Camelと連携するにはMQの宛先レベルで設定する必要があります。

+0

宛先設定でtargetClient = 1を設定して、QoSにエンドポイント設定を使用しましたか? –

+0

はい、うまくいきませんでした。それと並行して、優先属性を設定しました。 –

0

は私がWMQわからないですが、通常のJMSコンポーネントの真

セットに設定するオプション「preserveMessageQos」を持っている必要があり、特定のメッセージ・エンドポイント構成のためのJMSPriorityを設定する(私は信じているとラクダは同じように動作WMQ) JMSエンドポイントのQoS設定ではなく、メッセージに指定されたQoS設定を使用してメッセージを送信する場合は、trueに設定します。次の3つのヘッダーは、JMSPriority、JMSDeliveryMode、およびJMSExpirationと見なされます。あなたはそれらのすべてまたは一部のみを提供することができます。提供されていない場合、Camelは代わりにエンドポイントからの値を使用します。したがって、このオプションを使用すると、ヘッダーはエンドポイントの値を上書きします。対照的に、explicitQosEnabledオプションは、メッセージヘッダーの値ではなく、エンドポイントで設定されたオプションのみを使用します。

+0

preserveQoSを有効にしようとしました。デバッグ中に私たちはCamelでもそれらの値をJMSメッセージに設定し、ネイティブのmqコードはその内部をチェックすることで上書きします。 –

関連する問題