簡體   English   中英

在Mule緩存中使用DataWeave

[英]Using DataWeave in Mule cache

兩個月前,我在Mulesoft中配置了EE緩存。 突然,它停止工作了。 事實證明,DataWeave無法放置在緩存范圍內。 一旦將其移出范圍,它將再次完美運行。 我用這個測試:

<set-payload value="#[message.inboundProperties.'http.request.uri']" doc:name="Set Payload"/>
        <ee:cache cachingStrategy-ref="EBX_Response_Caching_Strategy" doc:name="Cache">
            <logger message="No entry with key: '#[payload]' was found in the cache. A request will be send to EBX service. Detailed response is returned: #[flowVars.detailedResponse]" level="INFO" doc:name="Logger"/>
            <scripting:transformer encoding="UTF-8" mimeType="application/json" doc:name="Set filter">
                <scripting:script engine="Groovy"><![CDATA[
flowVars['filter'] = 'filtervalue' ]]></scripting:script>
            </scripting:transformer>
            <http:request config-ref="HTTP_Request_Configuration" path="/ebx-dataservices/rest/data/v1/" method="GET" doc:name="EBX HTTP call">
                <http:request-builder>
                    <http:query-param paramName="login" value="${svc0031.login}"/>
                    <http:query-param paramName="password" value="${svc0031.password}"/>
                    <http:query-param paramName="pageSize" value="unbounded"/>
                    <http:query-param paramName="filter" value="#[filter]"/>
                    <http:header headerName="Host" value="myhost.com"/>
                </http:request-builder>
            </http:request>

            </ee:cache>
        <dw:transform-message metadata:id="91c16073-669d-4c27-a3ea-5cbae4e56ede" doc:name="Basic info response">
            <dw:input-payload doc:sample="sample_data\json.json"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
    hotels: payload.rows map ((row , indexOfRow) -> {
        name: row.content.companyName.content,
        propertyCode: row.content.propertyCode.content,
    })
}]]></dw:set-payload>
        </dw:transform-message>

如果我在緩存范圍內移動DataWeave轉換,則緩存將停止工作,並且始終會將請求發送到后端系統。 這是為什么? MuleSoft改變了什么嗎? 我們正在ESB 3.7.3上運行

您在Cache Scope中使用了消耗性負載,而當我們使用Consumable負載時,Cache始終是MISS,並且即使使用了Cache,Cache范圍內的處理器也將再次處理。 在您的情況下,您正在使用HTTP請求程序,該請求程序將為您提供耗材響應,因此將放棄緩存策略。 解決方案是使用“對象的字節數組”來消耗流並將響應設為非消耗,以便高速緩存將其高速緩存在內存中,下一次它將成為高速緩存HIT,並從內存中高速緩存中進行提取。 。 您的另一種選擇是在緩存作用域內使用Dataweave,這也將消耗您的傳入流並使緩存成為HIT。

有關Cache HIT和MISS以及耗材響應的更多信息,請訪問: https : //docs.mulesoft.com/mule-user-guide/v/3.7/cache-scope

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM