Spring 有条件的集成路由器
Spring integration router with condition
我有一个 header 在流程期间递增,然后消息进入循环,我根据这个 header 值路由它。我找不到配置此路由器的方法。
我找到了这个问题
Routing to a different channels based on condition
但它使用负载而不是 headers:
我试过像这样使用 Java 配置:
public ExpressionEvaluatingRouter router() {
var router = new ExpressionEvaluatingRouter("payload.getHeaders().get(failCount) => 2");
router.setChannelMapping("true", "logFailedChannel");
router.setChannelMapping("false", "retryChannel");
return router;
}
但它失败了,因为它无法解析这个“payload.getHeaders().get(failCount) => 5”
我也尝试过使用 HeaderRouner,但它对我不利,因为我必须像这样针对我的条件对每个选项进行硬编码:
router.setChannelMapping("1", "retryChannel");
router.setChannelMapping("2", "retryChannel");
router.setChannelMapping("3", "logFailedChannel");
router.setChannelMapping("4", "logFailedChannel");
等等
还有其他配置路由器的方法吗?
payload.getHeaders().get(failCount) => 2
没有这样的方法getHeaders()
(除非你的负载有一个)。评估的根是 Message<?>
,它具有 payload
和 headers
属性。
尝试headers.get('failCount') >= 2
。
我有一个 header 在流程期间递增,然后消息进入循环,我根据这个 header 值路由它。我找不到配置此路由器的方法。
我找到了这个问题 Routing to a different channels based on condition
但它使用负载而不是 headers:
我试过像这样使用 Java 配置:
public ExpressionEvaluatingRouter router() {
var router = new ExpressionEvaluatingRouter("payload.getHeaders().get(failCount) => 2");
router.setChannelMapping("true", "logFailedChannel");
router.setChannelMapping("false", "retryChannel");
return router;
}
但它失败了,因为它无法解析这个“payload.getHeaders().get(failCount) => 5”
我也尝试过使用 HeaderRouner,但它对我不利,因为我必须像这样针对我的条件对每个选项进行硬编码:
router.setChannelMapping("1", "retryChannel");
router.setChannelMapping("2", "retryChannel");
router.setChannelMapping("3", "logFailedChannel");
router.setChannelMapping("4", "logFailedChannel");
等等
还有其他配置路由器的方法吗?
payload.getHeaders().get(failCount) => 2
没有这样的方法getHeaders()
(除非你的负载有一个)。评估的根是 Message<?>
,它具有 payload
和 headers
属性。
尝试headers.get('failCount') >= 2
。