Spring 集成 enrichHeaders

Spring integration enrichHeaders

我有一个 header“BackOffTime”。我需要更新它,但使用另一个 header“failCount”。

像这样:

长 backOff = Math.pow(2, headers.get("failCount"));

enricherSpec.headerExpression("BackOffTime", backOff, true);

但问题是,该方法 enrichHeaders() 没有 lambda with (message, headers) ->

所以我无法从“failCount”中获取值header。

有这样的方法吗?:

.enrichHeaders(enricherSpec -> {
                    Long backOff = Math.pow(2, headers.get("failCount"));
                    enricherSpec.headerExpression("BackOffTime", backOff, true);
                })

我找到了一种获取方法 header,但它只允许获取它,而不能在任何函数中使用它:

enricherSpec.headerExpression("BackOffTime", "headers['failCount']", true);

考虑这样做:

.enrichHeaders(h -> h.headerFunction("BackOffTime", m -> Math.pow(2, m.getHeaders().get("failCount", Double.class)), true))

top-level Consumer<HeaderEnricherSpec> lambda 仅在配置阶段调用一次。您需要的是每条消息的函数调用。因此它必须是 HeaderEnricherSpec 上的一个选项。在我们的例子中,它是 headerFunction()。它也可以用 headerExpression() 完成,但我发现 Java 语法对 DSL 更方便。