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<?>,它具有 payloadheaders 属性。

尝试headers.get('failCount') >= 2