1

我有下面给我的微不足道的 Spring IntegrationFlow org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers

这似乎与Flow的最后一步有关,这是一个log步骤。如果我删除该log步骤或在该步骤之后放置另一个身份转换,Dispatcher has no subscribers则不会抛出。

我想了解log最后一步有什么问题。

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args)) {
            final Gateway gateway = ctx.getBean(Gateway.class);
            final String rs = gateway.send("hello");
            System.out.println(rs);

        }
    }

    @MessagingGateway(defaultRequestChannel = "flow.input")
    public interface Gateway {
        String send(String msg);
    }

    @Bean
    public IntegrationFlow flow() {
        return f -> f
                .transform((String p) -> p + ", world")
                .log(LoggingHandler.Level.INFO, "kljkh"); // throws Dispatcher has no subscribers 
    }
}

以下两个选项有效,但为什么不是log最后一步?

@Bean
public IntegrationFlow flow() {
    return f -> f
            .transform((String p) -> p + ", world")
            .log(LoggingHandler.Level.INFO, "kljkh")
            .transform(Function.identity()); // works
}
@Bean
public IntegrationFlow flow() {
    return f -> f
            .transform((String p) -> p + ", world"); // works
}
4

1 回答 1

0

看到这个答案

日志是窃听。在即将到来的 Spring Integration 5.0 中,我们允许.log()成为流中的最终元素。

解决方法是.channel("nullChannel")在 final 之后添加log()

于 2017-05-19T13:10:52.693 回答