我正在使用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”。你能帮忙吗,如果我错过了什么,请告诉我。
答案 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主题。
如果您想自己处理错误,可以使用专用或全局错误通道。