如何在 spring 集成 java dsl 中制作一个 header 值路由器并为其分配一个默认输出通道?
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");
}
})
但它本身并不是真正的 header 价值路由器,对吗?我似乎无法将 HeaderValueRouter 设置为路由规范,只能在第一个参数上给出 header 的名称。
此外,我在规范中找不到默认频道映射。感谢您的帮助!
老实说,<header-value-router>
自引入 SpEL
路由器以来就没有意义了,您可以像 expression="headers.STATE"
一样简单地配置它,就像在 [=47= 的配置中一样] 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()
保持不变。
至于"default channel mapping"。我想你只是指 default-output-channel
,我们在 XML 配置中有它。
如果您注意到 SI Java DSL 中没有任何组件具有 output-channel
选项(default-output-channel
起着相同的作用)。我们只是将 IntegrationFlow
中的下一个 .channel()
定义传播到当前的 outputChannel
感知组件。因此,要将 default-output-channel
映射到 .route()
,您应该在方法链中继续使用 IntegrationFlow
定义。像这样:
.route()
.handle()
因此,如果路由条件不满足任何.channelMapping()
和resolutionRequired == false
,消息将通过它们之间的隐式DirectChannel
发送到下一个.handle()
.
我目前是这样的:
.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 的名称。
此外,我在规范中找不到默认频道映射。感谢您的帮助!
老实说,<header-value-router>
自引入 SpEL
路由器以来就没有意义了,您可以像 expression="headers.STATE"
一样简单地配置它,就像在 [=47= 的配置中一样] 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()
保持不变。
至于"default channel mapping"。我想你只是指 default-output-channel
,我们在 XML 配置中有它。
如果您注意到 SI Java DSL 中没有任何组件具有 output-channel
选项(default-output-channel
起着相同的作用)。我们只是将 IntegrationFlow
中的下一个 .channel()
定义传播到当前的 outputChannel
感知组件。因此,要将 default-output-channel
映射到 .route()
,您应该在方法链中继续使用 IntegrationFlow
定义。像这样:
.route()
.handle()
因此,如果路由条件不满足任何.channelMapping()
和resolutionRequired == false
,消息将通过它们之间的隐式DirectChannel
发送到下一个.handle()
.