亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Mule 4.0 中做

在 Mule 4.0 中做

森林海 2023-04-13 10:33:15
我需要在 Mule 4.0 中創建一個“do while”循環。我需要一個將在給定條件下終止的循環。不幸的是,我似乎無法在 Mule 4.0 中執行此操作。使用遞歸循環,雖然不理想,但在 Mule 3 中可以使用,但在 Mule 4 中不再適用。我也曾經使用 until-successful 范圍來循環直到滿足特定條件,但是 Mule 4.0 中沒有失敗表達式,所以我無法檢查條件以終止。Mule 4.0 中創建簡單的 do-while 循環的前進方向是什么?
查看完整描述

5 回答

?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

我認為until-successful這仍然是最好的解決方案,因為它為您提供了一種在 X 次嘗試后跳出循環的方法。只是,不幸的是,需要控制錯誤。您可以使用簡單的choice處理器raise-error:


       <until-successful  maxRetries="5">

            <http:request method="GET" url="http://something" doc:name="Request" />

            <choice>

                <when expression="#[payload.status !='OK']">

                    <raise-error type="APP:REQUEST_NOT_FINISHED"/>

                </when>

            </choice>

        </until-successful>


查看完整回答
反對 回復 2023-04-13
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

Mule 流并不意味著作為一種編程語言工作。您有一個 foreach 范圍來迭代事物,DataWeave 有一個功能性的 map() 操作。

遞歸調用流程被認為是一種不好的做法,應該避免。這是可能的,但它在 Mule 4 中受到限制,因為它很容易導致堆棧溢出錯誤。

如果您絕對需要這樣做,您應該使用 Java 或腳本語言來完成。

也許您可以更深入地描述您試圖解決的用例,以防有其他更適合該問題的選項。


查看完整回答
反對 回復 2023-04-13
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

我希望有希望。我在一些答案中看到了DO,但我不知道如何添加條件。至少它有效并且不會拋出語法錯誤


%dw 2.0

output application/json

---

do {

     {

      n: 1

     } 

Mule 沒有 do-while 的概念。然而,它可以通過一個小技巧來模仿。唯一一個迭代(模擬 do)函數是 reduce,但它只有一個從迭代傳遞到迭代的累加器。這只有一個變量應該用于累積結果并指示迭代結束(模擬 while)。最簡單的方法是使用值作為累加器并使用符號作為指示器。在累積匯總值時,負結果表示周期結束。


%dw 2.0

var x=[1,2,3,4,5]

output application/json

---

-(x reduce (item, acc=0) -> if (item <4 and acc >= 0) acc + item else if (acc>0) -acc else acc) 

一些復雜的對象可用于收集結果,并且還具有作為對象一部分的循環結束指示符


%dw 2.0

var x=[1,2,3,4,5]

output application/json

---

(x reduce (item, acc={sum:0}) -> if (item < 4 and acc.end==null ) (acc - 'sum' ++ {sum: acc.sum+item}) else ( acc ++ {end:true} )).sum

https://simpleflatservice.com/mule4/DoWhileImitation.html


查看完整回答
反對 回復 2023-04-13
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

如果您正在等待服務器上運行的作業在繼續之前完成,您可以使用隊列實現這種編排——我使用過這種方法。

觸發任務后,將消息放在 VM 隊列中。在另一個流輪詢中,VM 隊列具有合理的輪詢頻率,具體取決于您期望任務完成多長時間。調用服務器以確定任務狀態,如果尚未完成,則將消息放回隊列中。如果任務已完成,請繼續執行您需要執行的任何其他操作。

這種方法可以防止堆棧溢出問題,但如果由于某種原因整個過程需要同步,則這種方法不可行。


查看完整回答
反對 回復 2023-04-13
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

以下解決方案使用foreach組件模擬 Mule 循環中的“循環”,沒有延遲或觸發錯誤:


            <set-variable value="#[1 to 100]" doc:name="loopArray"  variableName="loopArray"/>

            <foreach doc:name="For Each" collection="#[vars.loopArray]">

                <choice doc:name="Choice" >

                    <when expression="#[vars.hasNextPage &gt; 0]">                          

                        <flow-ref doc:name="getNextPage" name="getNextPage" />

                    </when>

                    <otherwise >

                        <logger level="DEBUG" doc:name="Logger" message="noop" />

                    </otherwise>

                </choice>

            </foreach>


查看完整回答
反對 回復 2023-04-13
  • 5 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號