You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4.4本地部署:预加载Object Store缓存无法命中问题排查

Mule 4.4预加载缓存无法查询问题解决

问题场景

本地部署Mule 4.4环境,需求是从数据库加载静态员工数据到缓存,每24小时刷新。通过Scheduler流程预加载数据到Object Store,但HTTP查询流程始终无法命中缓存,返回"Not found in cache"日志。

Scheduler预加载流程代码

<flow name="load_cache" doc:id="8eaefe57-6de8-4d4f-97d5-fa181ea54b8b" >
    <scheduler doc:name="Scheduler" doc:id="b3fb9ce7-7254-481e-a137-d37ed1cc30a3" >
        <scheduling-strategy >
            <fixed-frequency />
        </scheduling-strategy>
    </scheduler>
    <ee:transform doc:name="emp data from db" doc:id="b5d11958-3ea7-4596-9aed-51c616ae67f0" >
        <ee:message >
            <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[
    {
        "id" : "001",
        "name": "John"
    },
    {
        "id" : "002",
        "name" : "Jane"
    }
]]]></ee:set-payload>
        </ee:message>
    </ee:transform>
    <foreach doc:name="For Each" doc:id="da8ec47c-7b34-4707-ac78-6ffd433fb40b" >
        <os:store doc:name="Store" doc:id="d139954b-a4b7-4351-9463-8baccb5e2aba" key="#[payload.id]" objectStore="Object_store">
            <os:value ><![CDATA[#[payload.name]]]></os:value>
        </os:store>
    </foreach>
</flow>

HTTP查询流程代码

<flow name="header_pass_01Flow" doc:id="dc0c28a7-c277-4192-b641-e73af8afbde3" >
    <http:listener doc:name="Listener" doc:id="57e56cd6-a47e-456b-8c6d-e57627c673b8" path="/caching/*" config-ref="HTTP_Listener_config"/>
    <set-variable value='#[&quot;001&quot;]' doc:name="get emp name for empId" doc:id="130a350e-d23b-41f6-86c3-fe8104b63d3f" variableName="id"/>
    <ee:cache doc:name="Cache" doc:id="a11f6da2-d24e-4a69-a0b1-647c0b6dfda8" cachingStrategy-ref="Caching_Strategy">
        <logger level="INFO" doc:name="Logger" doc:id="fdeaaeff-06df-45d7-8c1f-410f343ae4e8" message="Not found in cache"/>
    </ee:cache>
</flow>

基础配置代码

<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="f1bec56d-de65-4a93-913d-07a7426d6bf6" >
    <http:listener-connection host="0.0.0.0" port="9091" />
</http:listener-config>

<os:object-store name="Object_store" doc:name="Object store" doc:id="152be16e-2fd9-4d48-8310-3d6d45be4bff" maxEntries="10" entryTtl="2" entryTtlUnit="HOURS" />
<ee:object-store-caching-strategy name="Caching_Strategy" doc:name="Caching Strategy" doc:id="79383e4a-b907-450d-92c9-9d15b1efbb81" objectStore="Object_store" />

解决方案

1. 统一缓存键匹配

ee:cache组件默认使用当前payload作为缓存键,但你的流程中缓存键应该是员工ID(vars.id)。需要为ee:cache显式指定key属性,确保查询时使用的键和Scheduler存入的键一致:

<ee:cache doc:name="Cache" doc:id="a11f6da2-d24e-4a69-a0b1-647c0b6dfda8" 
          cachingStrategy-ref="Caching_Strategy" 
          key="#[vars.id]">
    <!-- 缓存未命中时的逻辑:从Object Store读取数据 -->
    <os:retrieve doc:name="Retrieve Employee" 
                 key="#[vars.id]" 
                 objectStore="Object_store"
                 defaultValue="Employee not found"/>
    <logger level="INFO" message="Not found in cache - retrieved from Object Store"/>
</ee:cache>

2. 补充缓存组件的取值逻辑

原HTTP流程中ee:cache内部只有日志,没有实际获取缓存值的逻辑。添加<os:retrieve>组件,在缓存未命中时从Object Store读取数据(预加载的数据已存在,正常情况会直接命中缓存,不会执行内部逻辑)。

3. 修正Scheduler调度间隔

原fixed-frequency未设置间隔,默认1分钟刷新,不符合24小时刷新需求,修改为:

<scheduler doc:name="Scheduler" doc:id="b3fb9ce7-7254-481e-a137-d37ed1cc30a3" >
    <scheduling-strategy >
        <fixed-frequency frequency="24" timeUnit="HOURS"/>
    </scheduling-strategy>
</scheduler>

4. 验证数据存入状态

在Scheduler流程的<foreach>中添加日志,确认数据成功存入Object Store:

<foreach doc:name="For Each" doc:id="da8ec47c-7b34-4707-ac78-6ffd433fb40b" >
    <os:store doc:name="Store" doc:id="d139954b-a4b7-4351-9463-8baccb5e2aba" key="#[payload.id]" objectStore="Object_store">
        <os:value >#[payload.name]</os:value>
    </os:store>
    <logger level="INFO" message="Successfully stored employee: ID #[payload.id], Name #[payload.name]" />
</foreach>

验证步骤

  1. 启动Mule应用,观察Scheduler流程的日志,确认数据已存入Object Store。
  2. 发送HTTP请求到http://localhost:9091/caching,第一次请求若缓存未命中会执行内部逻辑,后续请求应该直接命中缓存(不再打印"Not found in cache"日志)。

内容的提问来源于stack exchange,提问作者boomslaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:14:57