我正在嘗試實作一個彈簧集成流程,如果輸入變數為真,則該流程需要多執行緒呼叫。如果此變數為真,則流程將執行多執行緒呼叫,主執行緒將繼續其流程。
然后最后需要等待兩個流程都完成,然后再回傳回應。
我已經成功地使用拆分器實作了多執行緒 spring 集成流程,但是拆分器導致所有訊息都進入同一個通道,這是不同的,因為多執行緒呼叫需要呼叫與執行主執行緒不同的通道。
有沒有辦法根據引數是否為真設定拆分器以發送到不同的通道?或者,如果該值為真,同時繼續主流程,我將如何設定一個執行程式通道來生成一個新執行緒。
至于等待兩個流程完成執行,對于這個用例來說,彈簧集成屏障或聚合器會是更好的方法嗎?
uj5u.com熱心網友回復:
考慮使用PublishSubscribeChannel一個Executor配置來讓相同的訊息發送到不同的并行流。通過這種方式,您真的可以與一個訂閱者繼續您的主要流程,并與其他訂閱者一起做其他事情。Executor所有這些都將并行執行。
檔案:https ://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-implementations-publishsubscribechannel
如果您仍然堅持必須僅在同一執行緒上執行主流,則考慮使用 a RecipientListRouter,其中一個接收者可能是主流中的無條件下一個直接通道。另一個接收者可以以您的boolean變數為條件,并且可以ExecutorChannel讓其訂閱者被并行呼叫。
檔案:https ://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#router-implementations-recipientlistrouter
對于等待這兩個流程,由您決定 -barrier一個aggregator或更復雜的scatter-gather。所有這些都將滿足您的“等待所有”要求。或者,您可以基于CountDownLatch某個標頭實作一些自定義解決方案。因此,每次并行流程完成時,都要倒計時。這樣,您甚至可以根據您的布林值確定數字。因此,如果沒有并行,那么1將僅執行主要流程,并且只有這個流程會倒計時您在原始請求中等待的鎖存器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520383.html
標籤:爪哇多线程弹簧集成
上一篇:使用互斥鎖等待退出信號
