2013-10-07 12 views
5

का उपयोग कर कुइल कैशिंग रणनीति मैं दो सर्वरों में एक साझा कैश रखने का एक तरीका ढूंढ रहा हूं और मैं ऑब्जेक्ट-स्टोर-कैशिंग-रणनीति के रूप में रेडिस का उपयोग करके जांच कर रहा हूं लेकिन संग्रहीत मूल्यों को पढ़ने पर मुझे समस्या आ रही है।रेडिस

कैश हिट मिस मान होने पर यह सफलतापूर्वक एक मान संग्रहीत करता है लेकिन मान पुनर्प्राप्त करते समय त्रुटि उत्पन्न करता है।

आवश्यक वस्तु/संपत्ति "muleContext" एक अनुमान यह वस्तु स्टोर कैशिंग-रणनीति एक वस्तु की दुकान है कि MuleContextAware इंटरफ़ेस लागू करता है की आवश्यकता हो सकती की तरह लगता है पर अशक्त

है।

क्या किसी को पता है कि यह सही है या इस समस्या को हल करने के लिए कैसे?

यहां उदाहरण के प्रवाह

<mule xmlns:redis="http://www.mulesoft.org/schema/mule/redis" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" 
    xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/redis http://www.mulesoft.org/schema/mule/redis/3.4/mule-redis.xsd"> 


    <redis:config name="Redis" doc:name="Redis" defaultPartitionName="test" /> 
    <ee:object-store-caching-strategy name="Redis_Caching_Strategy" doc:name="Caching Strategy"> 
     <spring-object-store ref="Redis" /> 
    </ee:object-store-caching-strategy> 

    <flow name="htmlCacheRedisFlow" doc:name="htmlCacheRedisFlow"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" path="cacheRedis" doc:name="HTTP"/> 
     <expression-transformer expression="#[payload.substring(payload.lastIndexOf('/') + 1)]" doc:name="Expression"/> 
     <ee:cache doc:name="Cache" cachingStrategy-ref="Redis_Caching_Strategy" > 
      <logger message="getting item from db for key #[payload]" level="INFO" doc:name="Logger"/> 
      <expression-transformer expression="#[payload + 'asd']" doc:name="Expression"/> 
     </ee:cache> 
    </flow> 
</mule> 
+0

ध्यान रखें कि, जब से तुम एंटरप्राइज़ संस्करण का उपयोग कर रहे हैं, तो आप मदद के लिए MuleSoft के पेशेवर समर्थन से संपर्क कर सकते हैं । यह सुविधा सामुदायिक संस्करण का हिस्सा नहीं है, इसलिए यहां StackOverflow पर समुदाय आपकी मदद करने में सक्षम नहीं हो सकता है ... लेकिन यह एक अच्छा सवाल है :) –

+0

ठीक है धन्यवाद मुझे नहीं पता था कि स्टूडियो सेट में अभी भी रनटाइम था ईई। अब मैंने इसे बदल दिया है, मुझे लगता है कि कैशिंग अब उपलब्ध नहीं है इसलिए सवाल अब मेरे लिए लागू नहीं है। – Stuart

उत्तर

1

जैसा कि पहले ही दाऊद द्वारा बताया गया है, सवाल टिप्पणी में है, ईई कैश गुंजाइश समुदाय संस्करण में उपलब्ध नहीं है। हालांकि समुदाय संस्करण में कैशिंग लागू करने के तरीके हैं।

ब्लॉग पोस्ट Enterprise caching with Mule ESB Community Edition दिखाता है कि कस्टम इंटरसेप्टर जोड़कर आप इसे कैसे कर सकते हैं। ब्लॉग पोस्ट ehcache का उपयोग करता है लेकिन आप इसके बजाय Redis का उपयोग करने के लिए इस उदाहरण को संशोधित कर सकते हैं।

संक्षेप में ब्लॉग पोस्ट है:

<custom-interceptor doc:name="PayloadCache" 
    class="se.redpill.mulecomponents.cache.PayloadCache"> 
    <spring:property name="cache" ref="MyCache"/> 
</custom-interceptor> 

और PayloadCache.java

package se.redpill.mulecomponents.cache; 
import net.sf.ehcache.Ehcache; 
import net.sf.ehcache.Element; 
import org.mule.DefaultMuleEvent; 
import org.mule.DefaultMuleMessage; 
import org.mule.api.MuleEvent; 
import org.mule.api.MuleException; 
import org.mule.api.MuleMessage; 
import org.mule.api.interceptor.Interceptor; 
import org.mule.api.processor.MessageProcessor; 
/** 
* A mule interceptor acting as a ehCache component. 
* Based on the Cache interceptor blueprint from Mule In Action by David Dossot and John D'Emic, 
* 
*/ 
public class PayloadCache implements Interceptor 
{  
     private MessageProcessor next; 
     private Ehcache cache; 
     public void setListener(MessageProcessor listener) 
     { 
     next = listener; 
     } 
     public void setCache(final Ehcache cache) 
     { 
     this.cache = cache; 
     } 
     public MuleEvent process(MuleEvent event) throws MuleException 
     { 
     final MuleMessage currentMessage = event.getMessage(); 
     final Object key = currentMessage.getPayload(); 
     final Element cachedElement = cache.get(key); 
     if (cachedElement != null) 
     { 
      return new DefaultMuleEvent(new DefaultMuleMessage(cachedElement.getObjectValue(), 
      currentMessage, event.getMuleContext()), event); 
     } 
     final MuleEvent result = next.process(event); 
     cache.put(new Element(key, result.getMessage().getPayload())); 
     return result; 
     } 
} 
+0

Mongodb का उपयोग करने के लिए इस उदाहरण को कैसे संशोधित करें? – user2016