我尝试使用Kafka作为消息代理在SCS应用程序内部处理期间为故障创建应用程序级错误处理程序。我知道SCS已经提供了DLQ功能,但在我的情况下,我想用自定义包装器类型包装失败的消息(提供失败上下文(源,原因等))
在https://github.com/qabbasi/Spring-Cloud-Stream-DLQ-Error-Handling中,您可以看到两种方法:一种是使用SCS,另一种是直接使用Spring Integration。 (两者都没有工作)
根据当前引用(https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_producing_and_consuming_messages),SCS将允许发布从Spring Integration错误通道收到的错误消息,但不幸的是,情况并非如此,至少对我而言。虽然应用程序在启动时记录以下内容
o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 2 subscriber(s).
答案 0 :(得分:1)
你不应该使用@StreamListener("errorChannel")
- 从绑定目的地消耗;捕获发送到errorChannel
使用@ServiceActivator(inputChannel = "errorChannel")
的邮件。
修改强>
您的应用有几个问题......
autoCommitOnError
是kafka活页夹属性@EnableBinding(CustomDlqMessageChannel.class)
@EnableIntegration
- boot为你做这件事请参阅my commit here。
和...
$ kafka-console-producer --broker-list localhost:9092 --topic testIn
>foo
和...
$ kafka-console-consumer --bootstrap-server localhost:9092 --topic customDlqTopic --from-beginning
?
contentType>"application/x-java-object;type=com.example.demo.ErrorWrapper"