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

时间:2016-03-09 21:44:25

标签: java spring spring-integration spring-dsl

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

@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的窃听来记录我的消息。有没有更好的方法使用Java DSL使用Spring Integration编写日志?

感谢。

1 个答案:

答案 0 :(得分:4)

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

另一方面,Spring Integration建议以adapter - <logging-channel-adapter>的形式登录集成流程。所以,你需要的只是发送消息到该适配器的通道。从配置角度看起来像:

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

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

我们可以使用Java DSL进行配置,但我们应该依赖目标类 - 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