使用外部目标的Spring Cloud Stream错误处理

时间:2018-07-06 03:50:34

标签: spring spring-integration spring-cloud spring-cloud-stream spring-cloud-dataflow

我一直在阅读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。它没有关联的外部目标。

  

使用@StreamListener批注专门用于   定义桥接内部通道和外部通道的绑定   目的地。鉴于目标特定错误通道确实   没有关联的外部目标,此类渠道是   Spring Integration(SI)的特权。这意味着处理程序   必须使用SI处理程序之一定义此目的地的地址   注释(即@ ServiceActivator,@ Transformer等)。

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

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

  1. @ServiceActivator的具体作用是什么?此特殊注释提供的功能是什么?
  2. 将错误传播到外部目标的最佳方法是什么? (例如,一个Kafka主题)。
  3. 是否将错误发布到外部目标以便以后以良好模式使用?

1 个答案:

答案 0 :(得分:2)

@ServiceActivator将专门用于内部错误处理(即,由同一应用程序进行)。如果您希望将错误发送给Kafka主题,以便外部使用者可以使用这些错误,则应使用DLQ。您可以在https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#kafka-dlq-processing

中找到更多详细信息

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