() { @Override public void accept(Rout-6ren">
gpt4 book ai didi

java - 如何在 spring integration java dsl 中制作 header 值路由器并为其分配默认输出 channel ?

转载 作者:行者123 更新时间:2023-11-30 08:07:32 30 4
gpt4 key购买 nike

我现在是这样的:

.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");
}
})

但它本身并不是真正的 header 值路由器,对吗?我似乎无法将 HeaderValueRouter 设置为路由规范,只能在第一个参数上给出 header 的名称。

另外,我无法在规范中找到默认 channel 映射。感谢您的帮助!

最佳答案

说实话<header-value-router>自从引入 SpEL 后就没有意义了路由器,您可以在其中简单地配置它 expression="headers.STATE" ,就像在您的 Java DSL 配置中一样。

对于任何类型的 Router,其他一切都是相同的执行。在 reference manual 中查看更多信息.

而且,是的,您可以使用 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()保持不变。

至于“默认 channel 映射”。我想你的意思是default-output-channel ,我们在 XML 配置中有。

如果您注意到 SI Java DSL 中没有一个组件具有 output-channel选项(default-output-channel 起着相同的作用)。我们只是传播下一个.channel() IntegrationFlow 中的定义到当前 outputChannel -感知组件。所以,要映射 default-output-channel对于 .route()你应该继续使用 IntegrationFlow 的方法链定义。像这样:

.route()
.handle()

因此,如果路由条件不满足任何.channelMapping()resolutionRequired == false , 消息将发送到下一个 .handle()通过隐式 DirectChannel他们之间。

关于java - 如何在 spring integration java dsl 中制作 header 值路由器并为其分配默认输出 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33639414/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com