如何从Mule获取缓存事件密钥

时间:2017-01-30 09:04:35

标签: caching mule anypoint-studio

我正在使用Anypoint Studio 6.1和Mule 3.8.1,并拥有一个使用默认事件密钥生成的mule托管商店缓存策略。

如何在流程中获取此密钥的值?它存放在哪里?

由于

1 个答案:

答案 0 :(得分:1)

默认情况下,如果您未在缓存中提供密钥生成器表达式,则生成器会将SHA 256 hash作为键。
参考: - https://github.com/mulesoft/mule/blob/mule-3.x/core/src/main/java/org/mule/keygenerator/SHA256MuleEventKeyGenerator.java
此生成器计算 当前消息 字节有效负载的SHA 256 hash

您可以使用以下示例获取流的缓存键列表: -

<ee:object-store-caching-strategy name="cachingStrategy" doc:name="cachingStrategy">
   <managed-store storeName="myNonPersistentManagedObjectStore" maxEntries="-1" entryTTL="20000" expirationInterval="5000"/>
</ee:object-store-caching-strategy>

<flow name="keylist" doc:name="keylist">
         <http:listener config-ref="HTTP_Listener_Configuration" path="/getkeyvalue" doc:name="HTTP"/>
            <scripting:component doc:name="Initialise Database"> 
            <scripting:script engine="Groovy">
                <scripting:text><![CDATA[
             def keyValues = [];
              for(a=0;a<muleContext.getRegistry().lookupObject("cachingStrategy").getStore().allKeys().size();a++)
               {
                     keyValues = muleContext.getRegistry().lookupObject("cachingStrategy").getStore().allKeys().get(a);

                }

                if(keyValues.isEmpty())
                {
                 return "Key is either null or expired !!!";
                }
                else
                {
                 return "KeysList " + muleContext.getRegistry().lookupObject("cachingStrategy").getStore().allKeys().toString();
                }           

               ]]></scripting:text>

            </scripting:script>  
        </scripting:component>
       </flow>

每当你在缓存中放入一些消息时,使用上面的流程就可以得到缓存范围提供的默认缓存键值的所有列表,默认为SHA 256 hash