Spring boot Spring云流:全局错误通道不工作

Spring boot Spring云流:全局错误通道不工作,spring-boot,spring-integration,messaging,spring-cloud-stream,Spring Boot,Spring Integration,Messaging,Spring Cloud Stream,据此,应该可以订阅Spring Integration提供的全局错误通道——“errorChannel” 在我非常简单的情况下,它不起作用: 应用程序: @SpringBootApplication @EnableBinding({MySink.class}) public class LoggingConsumerApplication { public static void main(String[] args) { SpringApplication.run(L

据此,应该可以订阅Spring Integration提供的全局错误通道——“errorChannel”

在我非常简单的情况下,它不起作用:

应用程序:

@SpringBootApplication
@EnableBinding({MySink.class})
public class LoggingConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(LoggingConsumerApplication.class, args);
    }

    @StreamListener(target = MySink.INPUT_ONE)
    public void handle(Person person) {
        System.out.println("Received: " + person);

        if(StringUtils.isEmpty(person.getName())){
            throw new RuntimeException("Wrong person name!");
        }
    }

    @ServiceActivator(inputChannel = "mySink.mySink-group.errors")
    public void error(Message<?> message) {
        System.out.println("Handling ERROR: " + message);
    }


    @ServiceActivator(inputChannel = "errorChannel")
    public void errorGlobal(ErrorMessage message) {
        System.out.println("Handling ERROR GLOBAL SA: " + message);
    }

    @StreamListener("errorChannel")
    public void errorGlobalListener(ErrorMessage message) {
        System.out.println("Handling ERROR GLOBAL Listener: " + message);
    }

    public static class Person {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String toString() {
            return this.name;
        }
    }
}
性质

spring.rabbitmq.host=192.168.0.100
spring.cloud.stream.bindings.inputOne.destination=mySink
spring.cloud.stream.bindings.inputOne.group=mySink-group
特定于目标的处理程序可以工作(mySink.mySink group.errors),但其他两个处理程序从未被调用

这里怎么了


试用了Spring Boot 2.1.6

,没有任何问题,工作正常。在文档中:“订阅名为input的通道的handle(..)方法引发异常。如果还有一个订阅错误通道input.myGroup.errors的订阅服务器,则所有错误消息都由该订阅服务器处理。”因此,这意味着您的错误由绑定特定的错误处理程序处理(
mySink.mySink group.errors
)或全局(
errorChannel


谢谢!我没有意识到默认情况下全局处理程序和特定处理程序不能一起工作。没关系,我们将尝试更新文档,使其更加清晰
spring.rabbitmq.host=192.168.0.100
spring.cloud.stream.bindings.inputOne.destination=mySink
spring.cloud.stream.bindings.inputOne.group=mySink-group