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

Spring Cloud Stream Error Handling using external destination

我一直在阅读 spring-cloud-stream 文档,特别是 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。这没有关联的外部目标。

The use of @StreamListener annotation is intended specifically to define bindings that bridge internal channels and external destinations. Given that the destination specific error channel does NOT have an associated external destination, such channel is a prerogative of Spring Integration (SI). This means that the handler for such destination must be defined using one of the SI handler annotations (i.e., @ServiceActivator, @Transformer etc.).

我也关注了关于 error channel creation 的整个线程,其中确认具有 @ServiceActivator 注释不会创建外部目标来传播错误。

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

  1. 具体做什么 @ServiceActivator 或这个特定注释提供的功能是什么?
  2. 将错误传播到外部目的地的好方法是什么? (比方说,一个 Kafka 主题)。
  3. 是否将错误发布到外部目标以便稍后在良好模式下使用?

@ServiceActivator 将专门用于内部错误处理(即由同一应用程序处理)。如果您希望将错误发送到 Kafka 主题以便它们可以被外部消费者使用,您应该使用 DLQ。您可以在此处找到更多详细信息 https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#kafka-dlq-processing

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