有没有办法使用基于Spring Kafka的消费者实现断路器模式。我想知道在实现我的 Spring kafka 消费者时,如果基于某些外部系统处理数据失败并引发网络错误,是否可以停止消费记录。但是,如果网络问题得到解决,消费者应该再次正常处理。
问问题
7424 次
3 回答
6
如果您想在下游服务或数据库关闭时停止消费消息,您可以参考此解决方案。
例子
- 消费者正在调用服务 A
- 服务 A 正在调用外部 HTTP 服务 B
- 您想在外部服务 B 关闭时设置断路器
在这种情况下,您可以在服务 A 上设置断路器。每当外部服务 B 关闭时,该电路就会打开。然后在此断路器的状态转换时,调用您的侦听器/绑定(如果您使用的是 spring-cloud-stream)来停止/暂停消费者。因此,您的消息将保留在队列/主题上,直到断路器再次关闭,并且您不必死信消息或将它们放入错误队列/主题中。
您可以参考下面的链接以获取详细的解决方案,该解决方案使用Resilience4j 实现断路器,spring-cloud-stream 用于消费者。
于 2020-02-17T14:43:35.317 回答
3
使用死信队列(DLQ)重试是处理消费者失败的好模式,而断路器模式是处理生产者问题的好模式。
于 2018-05-31T19:30:28.287 回答
0
鉴于:
- 服务 A 产生到主题 T 事件 e1
- 服务 B 从主题 T 事件 e1 消费并调用远程 REST 服务 r1
然后:
- 由于服务 A 和 B 通过主题 T 进行交互,因此不需要背压。
- 您需要关闭服务 B 和远程 REST 服务 r1 之间的电路。为此,您可以只使用 spring boot @HystrixCommand 并在“fallbackMethod”方法中抛出异常。这不会提交偏移,只要电路打开,您就会重新使用事件 e1。
我就是这样做的:-)如果您找到了更好的方法,请分享!
于 2018-09-13T14:21:18.270 回答