当前位置: 首页 > 知识库问答 >
问题:

Spring云流:Global errorChannel不工作

桑睿识
2023-03-14

根据本文档,应该可以订阅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;
        }
    }
}
public interface MySink {

    /**
     * Input channel name.
     */
    String INPUT_ONE = "inputOne";

    /**
     * @return input channel.
     */
    @Input(MySink.INPUT_ONE)
    SubscribableChannel inputOne();
}
spring.rabbitmq.host=192.168.0.100
spring.cloud.stream.bindings.inputOne.destination=mySink
spring.cloud.stream.bindings.inputOne.group=mySink-group

共有1个答案

慕容弘懿
2023-03-14

没有任何问题,它正在按预期工作。doc中:“订阅名为input的通道的handle(..)方法引发异常。如果还有错误通道input.mygroup.errors的订阅者,则所有错误消息都由该订阅者处理。”因此,这意味着您的错误可以通过绑定特定错误处理程序(mysink.mysink-group.errors)或全局(errorchannel)来处理。

https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.2.0.release/spring-cloud-stream.html#spring-cloud-stream-overview-error-handling

 类似资料:
  • 我正在尝试通过SCSt频道构建并获取KTable。但这并不奏效。输入KTable没有数据,但如果我尝试查看KSTream聚合(toStream()),我可以看到一些数据。我明白了,KTable是不可查询的,它没有可查询的名称。 类别: 绑定: application.yml:

  • 我正在尝试在Spring云数据流中配置DLQ。下面是流定义以及我如何部署它 在自定义转换处理器代码中,我已经提到过 这意味着若消息包含错误,那个么RunTimeException和我想在DLQ中捕获这些消息。但当我运行代码时,似乎没有得到任何名为test tran的Kafka DL队列。 我是否需要设置更多属性来启用DLQ,还是需要更改代码中的某些内容以正确使用DLQ。 自定义转换代码 Trans

  • 我用Artemis绑定器设置了一个Spring云流https://github.com/snowdrop/spring-cloud-stream-binder-artemis.我有两个应用程序,即生产者和消费者。下面是我的application.yml配置 制作人配置 消费者配置 一切正常,即生产者向队列发送数据,消费者能够处理数据,但不反映并发性。当我检查Artemis控制台时,我看到只有一个消

  • 我无法使用功能供应商发送Avro消息。SCSt尝试将消息作为JSON发送,但失败。有人能指出是否需要任何其他配置吗? 这是供应商的功能bean 和配置

  • 现在我正在尝试用kafka创建消息服务功能以使用< code > spring-cloud-stream-bind-Kafka ,但效果不太好。 Spring罩1.4.2 当我使用此错误日志启动项目时失败 我在怀疑我的春靴版本。这么低配的版本。< br >我认为< code > spring-cloud-stream-binder-Kafka 在spring boot 2.0版本下无法使用或者其他

  • 我使用Spring Stream云来消费Kafka上的消息。当Kafka上的信息产生时,所有的消费者都受到了冲击。 但Kafka的文献表明,通过使用群体,只有一个消费者消费信息。 这是我的消费代码。 这是我的配置,但我的两个方法都调用了:(