0

MessageProcessor を使用して WSO2 ESB 4.6.0 経由でメッセージを送信しようとしています: Proxy-
>Proxy(Store)->Processor->Sequence->Proxy
Proxy #1 に プロパティ (' transport' スコープ)を設定し、次の宛先に送信します。 Proxy #2 では正常にログに記録できますが、メッセージを Sampling Processor 経由で Proxy #3 に渡すと、プロパティが失われます。
これはバグですか?プロセッサ経由で「トランスポート」プロパティを送信するにはどうすればよいですか? Proxy_3の代わりに表示されること

を期待しています。value_1null


<messageProcessor name="Processor_1" class="org.apache.synapse.message.processors.sampler.SamplingProcessor" messageStore="Store_1" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="sequence">Sequence_1</parameter>
</messageProcessor>

メッセージストア

Store_1 is InMemoryMessageStore

プロキシ_1

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_1" transports="jms" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="my_property_1" value="value_1" scope="transport"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence/>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_2" format="soap11" />
      </endpoint>
   </target>
   <parameter name="transport.jms.Destination">Queue</parameter>
</proxy>

プロキシ_2

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_2" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="preserveProcessedHeaders" value="true"/>
         <log level="custom" separator=",">
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <store messageStore="Store_1"/>
      </inSequence>
   </target>
</proxy>

シーケンス_1

<sequence xmlns="http://ws.apache.org/ns/synapse" name="Sequence_1">
   <send>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_3" format="soap11"/>
      </endpoint>
   </send>
</sequence>

プロキシ_3

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_3" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="custom">            
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <send/>
      </inSequence>
   </target>
</proxy>
4

2 に答える 2

3

トランスポート プロパティは HTTP ヘッダーとして渡されます。ただし、メッセージをキューに格納すると、コンテンツ タイプが XML に設定されたメッセージ ペイロードで使用可能なものだけが格納されます。メッセージをキューに保存するときに、すべてのカスタム HTTP ヘッダー情報を保持する標準的な方法はありません。この追加ヘッダーを考慮して、既存のメッセージ ストア/プロセッサの実装を強化する必要があります。ただし、より簡単な解決策は、メッセージをキューに格納する前に、エンリッチ メディエーターを使用してヘッダー値をメッセージのペイロード要素として設定することです。次に、プロキシから送信する前に、それを抽出し、カスタム ヘッダーを作成して送信します。

于 2013-06-05T13:09:49.743 に答える
2

チンタナが言ったように、ESB 4.6.0 または 4.7.0 を使用する場合はペイロードに追加する必要があります。ただし、メッセージをストアに保存するときにヘッダー値を保持するように、これを既に修正しています。これは次のリリースで提供されます。

于 2013-08-04T22:17:16.030 に答える