使用spring cloud stream将错误消息发送到错误通道

时间:2017-10-18 19:10:00

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

我正在使用spring-cloud-stream处理spring boot应用程序:1.3.0.RELEASE,spring-cloud-stream-binder-kafka:1.3.0.RELEASE。我使用spring集成dsl来拆分文件和beanio中的行以将行转换为json,要求是将成功的json消息写入kafka主题并将错误消息写入不同的kafka主题。以下是application.yml中的配置。

spring:
  cloud:
    stream:
      kafka:
        binder:
          autoAddPartitions: true
      bindings.webmarketbasket:
        destination: webmarketbasket
        group: usproductrecommendationsgroup
        producer:
          partitionCount: 5
          errorChannelEnabled: true
      bindings.webmarketbasket.errors:
        destination: webmarketbasketerrors
        group: usproductrecommendationsgroup
        producer:
          partitionCount: 5
      bindings.error:
        destination: errorchannel
        group: usproductrecommendationsgroup
        producer:
          partitionCount: 5

我注意到spring-cloud-stream-binder-kafka中的pull请求https://github.com/spring-cloud/spring-cloud-stream/pull/1039:1.3.0.RELEASE,当errorChannelEnabled设置为true时创建PublishSubscribeChannel,还有一个测试用例来检查bean是否为为生产者错误频道创建。

当我在我的应用http://localhost:8195/beans中检查弹簧执行器url时,会创建“errorChannel”用于全局错误通道的bean,但不会创建“webmarketbasket.errors”bean。当存在“org.springframework.messaging.MessageHandlingException”时,错误消息将发送到“errorchannel”kafka主题并停止处理文件中的剩余行。从未创建过Kafka主题“webmarketbasketerrors”。你能帮忙吗,如果我错过了什么,请告诉我。

1 个答案:

答案 0 :(得分:0)

你好像混淆了两件事。

Spring Integration Error Channel Support适用于您希望通过errorChannel将某些内容发布到绑定到目标的全局spring.cloud.stream.bindings.error.destination=myErrors

new support in 1.3为每个侦听器创建一个错误通道;它是pub / sub,它被桥接到全局errorChannel。因此,该消息也将发布到...bindings.error.destination(如果已配置;在您的情况下,目标称为errorChannel)。专用错误通道的bean名称为webmarketbasket. usproductrecommendationsgroup.errors。框架没有绑定到该频道的kafka主题。

如果您想自己处理错误,可以使用专用或全局错误通道。