簡體   English   中英

如何在Spring Integration Java DSL中創建標頭值路由器並為其分配默認輸出通道?

[英]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.

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