This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Cache Mediator

When a message comes to the Cache mediator, it checks whether an equivalent message has been seen before based on message hashes. If such a message has existed before, the Cache mediator executes the onCacheHit sequence (if specified), fetches the cached response, and prepares the EI to send the response. The onCacheHit sequence can send back the response message using a Send Mediator. If the onCacheHit sequence is not specified, the cached response is sent back to the requester.

The Cache mediator does not cache the response status code of the HTTP response in the cache table. Instead, it returns the "200 OK" status code on a cache hit, which is the default request success status response. If you want to return a different status code when the request gets a cache hit, you can update the response status code in the onCacheHit sequence.

The Cache mediator is a content-aware mediator.



Syntax

<cache [id="string"] [hashGenerator="class"] [timeout="seconds"] [scope=(per-host | per-mediator)]
     collector=(true | false) [maxMessageSize="in-bytes"]>
   <onCacheHit [sequence="key"]>
     (mediator)+
   </onCacheHit>?
   <implementation type=(memory | disk) maxSize="int"/>
</cache>



UI Configuration

Click on the relevant tab to view the UI configuration depending on whether the cache type of the cache mediator is Finder or Collector.

Note

You can configure the mediator using XML. Click switch to source view in the Mediator window.

Examples

Following are examples of how you can use the Cache mediator.

Example one

In this example, the first message sent to the endpoint, and the cache is not hit. The Cache mediator configured in the Out sequence caches the response to this message. When a similar message is sent to the second time, the previous response will be directly fetched from the cache and sent to the requester. This happens because no onCacheHit sequence is defined.

<sequence name="SEQ_CACHE">
  <in>
    <cache scope="per-host"
      collector="false"
      hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator"
      timeout="20">
      <implementation type="memory" maxSize="100"/>
    </cache>

    <send>
      <endpoint>
        <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
      </endpoint>
    </send>
  </in>

  <out>
    <cache scope="per-host" collector="true"/>
    <send/>
  </out>
</sequence>

Example two

According to this example, if you define a cache collector using the cache mediator in the in sequence, you need to add the RESPONSE property to consider the message as a response message.

<api xmlns="http://ws.apache.org/ns/synapse" name="cacheAPI" context="/cache">
   <resource methods="POST GET" uri-template="/headerapi/*">
      <inSequence>
         <cache id="cache-sample" scope="per-host" collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator" timeout="5000">
            <implementation type="memory" maxSize="1000"/>
         </cache>
         <call>
            <endpoint>
               <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
         </call>
         <property name="RESPONSE" value="true" scope="default" type="STRING"/>
         <enrich>
            <source type="inline" clone="true">
               <ax21:newvalue xmlns:ax21="http://services.samples/xsd">testsamplevalue                </ax21:newvalue>
            </source>
            <target xmlns:ax21="http://services.samples/xsd" xmlns:ns="http://services.samples" action="sibling" xpath="//ns:getQuoteResponse/ns:return/ax21:volume"/>
         </enrich>
         <cache scope="per-host" collector="true"/>
         <respond/>
      </inSequence>
   </resource>
</api>

Samples

 Sample 420: Simple Cache Implemented on EI for the Actual Service.

Invalidating Cached Responses Remotely

You can invalidate all cached response remotely by using any JMX monitoring tool such as Jconsole using the exposed MBeans. You can use the Invalidatemediatocache()operation of the org.wso2.carbon.mediation MBean for this as shown below.

JMX monitoring through JConsole