是否有使用 Java DSL 与 Spring 集成记录消息的组件?

Is there a component for logging messages with Spring Integration using Java DSL?

我正在使用 Spring 集成来开发我的集成方案。当我不得不写一些日志来提供一些信息时,我是这样写的:

@Bean
IntegrationFlow blacklist(BlacklistService service) {
    return m -> m
            .wireTap(f -> f.handle(t -> log.info("Adding email source address in blacklist...")))
            .<MessageHandlingException, Blacklist>transform(p -> SourceBlacklist.of((Email) p.getFailedMessage().getHeaders().get(IntegrationConstants.MailSender.EMAIL)))
            .wireTap(f -> f.handle(t -> log.info("Email source address added to blacklist.")))
            .handle(service, "voidSave");
}

我正在使用带有 lambda 和 handle 的窃听器来记录我的消息。有没有更好的方法来使用 Spring 集成使用 Java DSL 编写日志?

谢谢。

您始终可以只打开 org.springframework.integration 类别的日志记录。

从另一端 Spring 集成建议将集成流程作为 adapter - <logging-channel-adapter> 登录。因此,您需要的只是将消息发送到该适配器的通道。从配置的角度来看,它看起来像:

<wire-tap channel="logging" pattern="*"/>

<logging-channel-adapter id="logging"/>

同样我们可以配置Java DSL,但是我们应该依赖目标class - LoggingHandler:

@ServiceActivator(inputChannel = "logging")
@Bean
public loggingHandler() {
    return new LoggingHandler();
}

...

.transform()
.wireTap("logging")
.handle();

虽然我明白你的意思,但我们确实可以直接向框架添加一些方便的东西。

欢迎随时就此事提出 GH 问题 (https://github.com/spring-projects/spring-integration-java-dsl/issues),我们会继续讨论该功能。

但说实话,现在您的解决方案看起来还不错。

更新

关于此事的框架请求:https://github.com/spring-projects/spring-integration-java-dsl/issues/70