【发布时间】:2017-07-13 23:23:37
【问题描述】:
使用以下配置和场景,达到 maxAttempts 时会发生什么?
具有 Kafka 绑定和以下属性的 Spring Cloud Stream:
- spring.cloud.stream.bindings.input.consumer.maxAttempts=3
- spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOffset=true
- spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOnError=false
- spring.cloud.stream.kafka.bindings.input.consumer.enableDlq=false
这是场景:
- 消费者通过@StreamListener注解接收消息载荷
- 在从带注释的方法返回之前,消费者尝试将消息持久化到数据库中
- 数据库已关闭,@StreamListener 注解的方法抛出运行时异常
我看到的行为是消费者重试消息,直到达到 maxAttempts 限制。然后什么都没有发生,直到我重新启动服务。重新启动后,消息将被重新使用。
如果在达到 maxAttempts 后数据库再次可用,会发生什么情况?我是重启服务的唯一选择吗?有没有办法将 maxAttempts 设置为无穷大?
我怀疑我没有完全理解这种行为
【问题讨论】: