![](/img/trans.png)
[英]Spring Integration: Content based router with default output channel?
[英]How to make a header value router in spring integration java dsl and assign it a default output channel?
我現在有這樣的東西:
.route("headers.STATE", new Consumer<RouterSpec<ExpressionEvaluatingRouter>>() {
@Override
public void accept(RouterSpec<ExpressionEvaluatingRouter> spec) {
spec
.channelMapping(ProcStatus.NORMAL_OPERATION.toString(), "primaryChannel")
.channelMapping(ProcStatus.FAILED_OVER.toString(), "secondaryChannel")
.channelMapping(ProcStatus.UNKNOWN.toString(), "stateRetrievalChannel");
}
})
但這本身並不是一個標頭值路由器,對嗎? 我似乎無法將HeaderValueRouter設置為路由規范,而只是在第一個參數上給出標題的名稱。
另外,我在規范上找不到默認的頻道映射。 謝謝您的幫助!
老實說,自從引入SpEL
路由器以來, <header-value-router>
就沒有意義了,您可以像在Java DSL的配置中那樣像expression="headers.STATE"
那樣簡單地對其進行配置。
對於任何一種Router
實現,其他所有內容都是相同的。 請參閱參考手冊中的更多內容 。
而且,是的,您也可以直接使用HeaderValueRouter
:
.route(new HeaderValueRouter("STATE"), new Consumer<RouterSpec<ExpressionEvaluatingRouter>>() {
@Override
public void accept(RouterSpec<ExpressionEvaluatingRouter> spec) {
spec
.channelMapping(ProcStatus.NORMAL_OPERATION.toString(), "primaryChannel")
.channelMapping(ProcStatus.FAILED_OVER.toString(), "secondaryChannel")
.channelMapping(ProcStatus.UNKNOWN.toString(), "stateRetrievalChannel");
}
})
但是如您所見, .channelMapping()
保持不變。
至於“默認通道映射”。 我認為您的意思是在XML配置中具有default-output-channel
。
如果您發現SI Java DSL中沒有一個組件具有output-channel
選項( default-output-channel
扮演相同的角色)。 我們只是將IntegrationFlow
的下一個.channel()
定義傳播到當前的outputChannel
組件。 因此,要映射.route()
的default-output-channel
,您應該只在帶有IntegrationFlow
定義的方法鏈中進行操作。 像這樣:
.route()
.handle()
因此,如果路由條件不滿足任何.channelMapping()
和resolutionRequired == false
,則消息將通過它們之間的隱式DirectChannel
發送到下一個.handle()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.