僅當先前的通道配接器寫入已成功寫入時,我才想寫入通道配接器。我試圖通過以下方式做到這一點:
@Bean
public IntegrationFlow buildFlow() {
return IntegrationFlows.from(someChannelAdapter)
.handle(outboundChannelAdapter1)
.handle(outboundChannelAdapter2)
.get();
}
但我得到以下例外:The ‘currentComponent’ (…ReactiveMessageHandlerAdapter) is a one-way 'MessageHandler’ and it isn’t appropriate to configure ‘outputChannel’. This is the end of the integration flow.
我該怎么做?
uj5u.com熱心網友回復:
如果您的處理程式實作是單向的,即發即棄,那么確實沒有理由繼續流程。如果當前處理程式正在回復生成,它可以繼續配置,并且我們可以構建一條訊息以發送到下一個通道。
在您的情況下.handle(outboundChannelAdapter1)是 just void,因此下一個.handle(outboundChannelAdapter2)將沒有任何東西可以繼續流程。因此,該框架會提示您這樣的配置是錯誤的。它被稱為流是有原因的:當前端點的結果將成為下一個端點的輸入。如果沒有結果,則不能繼續。在您看來,它還能如何發揮作用?
關鍵是需要向您的通道配接器寫入一些內容。一種解決方案是PublishSubscribeChannel將相同的輸入訊息分發給它的所有訂閱者。如果這符合您的期望,請查看它在 Java DSL 中的支持:https ://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl -子流。
另一種方式是一種RecipientListRouter模式:https ://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#router-implementations-recipientlistrouter 。
您也可以實作相同的目標WireTap,但這取決于您的解決方案的業務邏輯:https ://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-wiretap 。
但無論如何:您需要了解,只有在其通道有輸入訊息時才能呼叫第二個處理程式。在所有這些情況下,我向您展示了它與您發送給第一個處理程式的訊息完全相同。如果您的期望不同,請詳細說明如果第一個處理程式沒有回傳任何內容,您希望第二個處理程式收到什么樣的訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/426035.html
上一篇:春季啟動自動配置。意外行為
