2017-05-02 3 views
0

APIとして公開されているサービスにキャッシュ機能を追加しようとしているため、繰り返し要求でキャッシュされたレスポンスが返されます。しかし、キャッシュされた応答の代わりに、メディエータはクライアントから送信されたメッセージを返しています。キャッシュメディエータがEI 6.1でキャッシュレスポンスを返さない

<?xml version="1.0" encoding="UTF-8"?> 
<api context="/config" name="myAPI" xmlns="http://ws.apache.org/ns/synapse"> 
    <resource methods="GET"> 
     <inSequence> 
      <cache collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator" id="testCache" scope="per-mediator" timeout="200"> 
       <onCacheHit/> 
       <implementation maxSize="100" type="memory"/> 
      </cache> 
      <property expression="$url:intg" name="uri.integration" scope="default" type="STRING"/> 
      <property expression="$url:inst" name="uri.institution" scope="default" type="STRING"/> 
      <payloadFactory media-type="xml"> 
       <format> 
        <con:show xmlns:con="http://com.dvg.wso2/configservice"> 
         <con:SEL_INTG_NAME>$1</con:SEL_INTG_NAME> 
         <con:SEL_INSTITUTION>$2</con:SEL_INSTITUTION> 
        </con:show> 
       </format> 
       <args> 
        <arg evaluator="xml" expression="get-property('uri.integration')"/> 
        <arg evaluator="xml" expression="get-property('uri.institution')"/> 
       </args> 
      </payloadFactory> 
      <header name="Action" scope="default" value="urn:show"/> 
      <send> 
       <endpoint> 
        <address format="soap11" uri="local:///services/INTG_DVG_ConfigService/"/> 
       </endpoint> 
      </send> 
     </inSequence> 
     <outSequence> 
      <cache collector="true" scope="per-mediator" id="testCache"/> 
      <send/> 
     </outSequence> 
     <faultSequence/> 
    </resource> 
</api> 

私の予想出力は何かのようになります。ここでは
は私api.Itの構成は2つのクエリパラメータを受け取り、それがローカルDSSサービスに送信するpayoadを作成するためにそれらを使用してGETリソースを説明し、次の

<soapenv:Body> 
    <properties> 
     <property> 
      <key>A</key> 
      <value>A</value> 
     </property> 
    </properties> 
</soapenv:Body> 

しかし、私はこのようなキャッシュされた応答を受信して​​います:

コンテンツである
<con:show xmlns:con="http://com.dvg.wso2/configservice"><con:SEL_INTG_NAME>A</con:SEL_INTG_NAME><con:SEL_INSTITUTION>A</con:SEL_INSTITUTION></con:show> 

このような私が順番に作成しているペイロードのキャッシュミスの場合には期待される応答を受け取ると述べるべきである。

キャッシュメディエータは、キャッシュミスの応答を格納し、キャッシュヒットした場合にそれを返すべきではありませんか?
なぜ間違ったコンテンツで応答していますか?

---編集---
org.wso2.carbon.mediator.cache.CacheMediatorログの設定を変更した後、私はキャッシュメディエーターが実際に節約し、代わりに、入力メッセージを回復していることをconirmすることができました応答の。
proxyServiceで再現しようとすると、API内でのみこの動作が発生しません。

+0

あなたのケースがファインダーである可能性があります(それは応答ではなく着信メッセージをキャッシュします) – simar

+0

@simarキャッシュが機能するためにコレクタ/ファインダメディエータのペアが必要はありませんか? 1つは着信メッセージの要求ハッシュを検索し、もう1つはキャッシュ内の応答メッセージを収集するか? –

+0

あなたは正しいです。私は文書を読むことに注意を払っていませんでした。 – simar

答えて

0

私はキャッシュメディエーターをAPIで動作させることができませんでしたが、プロキシサービスで実装したときに期待どおりに動作することがわかりました。
私はインテグレーションをリファクタリングして、APIがプロキシサービスを呼び出すようにしてから、このプロキシがdssサービスを呼び出す前にキャッシュを検証するようにしました。
プロキシとdssの呼び出しでローカルトランスポートが使用されたため、パフォーマンスに大きな影響はありませんでした。
将来、誰かがこれを読んでいて、キャッシュメディエーターをAPIサービスで適切に使用する方法を理解している場合は、コメントを残してください。

関連する問題