丢弃 Spring 集成 DSL 服务激活器中的消息

Discarding a Message within a Spring Integration DSL Service Activator

有没有一种方法可以从使用 Spring 集成 DSL .handle() 方法定义的 Spring 集成服务激活器中丢弃消息?

更具体地说,假设下面的 IntegrationFlow 定义...

public IntegrationFlow sampleFlow() {
    return IntegrationFlows
             .from("someChannel")
             .handle(someServiceClass::someMethod)
             .get();
}

有没有办法根据 someMethod 定义中的某些评估丢弃消息?理想情况下,我想执行一些日志记录然后丢弃。

我发现从 someMethod 返回 null 似乎可以有效地结束流程,但我不确定这是否是最 graceful/correct 的解决方案。如果这是推荐的解决方案,那很好。

没错。停止处理从服务方法返回 null 确实是非正式模式。我们甚至以非官方的方式记录了它:https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/messaging-endpoints.html#service-activator-namespace

The service activator is one of those components that is not required to produce a reply message. If your method returns null or has a void return type, the service activator exits after the method invocation, without any signals.

您还可以通过 filter() 实现丢弃并记录目标。