我一直在阅读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错误主题中的错误。基于此,我有以下问题,
@ServiceActivator
的具体作用是什么?此特殊注释提供的功能是什么?答案 0 :(得分:2)
@ServiceActivator将专门用于内部错误处理(即,由同一应用程序进行)。如果您希望将错误发送给Kafka主题,以便外部使用者可以使用这些错误,则应使用DLQ。您可以在https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#kafka-dlq-processing
中找到更多详细信息如果您还有其他问题,请告诉我们