代码之家  ›  专栏  ›  技术社区  ›  dbustosp

使用外部目标处理spring云流错误

  •  1
  • dbustosp  · 技术社区  · 6 年前

    我一直在阅读spring云流文档,特别是 error handling 以下内容:

    @StreamListener(Sink.INPUT) // destination name 'input.myGroup'
    public void handle(Person value) {
        throw new RuntimeException("BOOM!");
    }
    
    @ServiceActivator(inputChannel = Processor.INPUT + ".myGroup.errors") //channel name 'input.myGroup.errors'
    public void error(Message<?> message) {
        System.out.println("Handling ERROR: " + message);
    }
    

    关于文档中关于它的内容,当您想要捕获错误时,您可能需要使用 @ServiceActivator 是的。这没有关联的外部目标。

    使用@streamlistener注释的目的是 定义桥接内部通道和外部通道的绑定 目的地。假设目标特定的错误通道 没有关联的外部目标,此类通道是 spring积分(si)的特权。这意味着处理程序 对于这样的目的地,必须使用一个si处理程序来定义 注释(即,@serviceactivator,@transformer等)。

    我也一直在关注 error channel creation ,它证实了 @服务激活器 注释不会创建外部目标来传播错误。

    我有一个用例,外部侦听器进程将使用发布到特定kafka错误主题中的错误。基于此,我有以下问题,

    1. 具体做什么 @服务激活器 或者这个特别的注释提供了什么特性?
    2. 将错误传播到外部目的地的好方法是什么?(比如说,卡夫卡的主题)。
    3. 是否将错误发布到外部目的地以便在以后使用良好的模式?
    1 回复  |  直到 6 年前
        1
  •  2
  •   Oleg Zhurakousky    6 年前

    @ServiceActivator将专门用于内部错误处理(即由同一个应用程序)。对于希望将错误发送到Kafka主题以便外部使用者可以使用它们的情况,应该使用DLQ。你可以在这里找到更多的细节 https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#kafka-dlq-processing

    如果您还有其他问题,请告诉我们