如何从Spring Cloud Stream中的Spring Integration错误通道中捕获错误?

时间:2017-11-06 11:51:26

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

我尝试使用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).

1 个答案:

答案 0 :(得分:1)

你不应该使用@StreamListener("errorChannel") - 从绑定目的地消耗;捕获发送到errorChannel使用@ServiceActivator(inputChannel = "errorChannel")的邮件。

修改

您的应用有几个问题......

  1. 版本1.3
  2. 中添加了新的错误处理代码
  3. autoCommitOnError是kafka活页夹属性
  4. 您需要@EnableBinding(CustomDlqMessageChannel.class)
  5. 你真的不需要@EnableIntegration - boot为你做这件事
  6. 请参阅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"