有没有一种方法来实现一个断路器模式与SpringKafka为基础的消费者。我想知道,在实现我的springkafka消费者时,如果基于某个外部系统处理数据失败并引发网络错误,是否可以停止消费记录。但是,如果网络问题得到解决,消费者应再次正常处理。
uyhoqukh1#
鉴于:服务a生成主题t事件e1服务b使用来自主题t事件e1的消息并调用远程rest服务r1然后:由于服务a和服务b通过主题t进行交互,因此不需要背压。您需要关闭服务b和远程rest服务r1之间的电路。为此,只需使用spring boot@hystrixcommand并在“fallbackmethod”方法中抛出一个异常。这将不会提交偏移量,并且只要电路开路,您将重新使用事件e1。我就是这样做的:-)如果你找到了更好的方法请分享!
unhi4e5o2#
死信队列重试(dlq)是处理用户故障的好模式,断路器模式是处理生产者问题的好模式。
kfgdxczn3#
如果要在下游服务或数据库关闭时停止使用消息,可以参考此解决方案。例子消费者正在呼叫服务服务a正在调用外部http服务b您想在外部服务b关闭时设置断路器在这种情况下,您可以在服务a上设置断路器。每当外部服务b关闭时,此电路将断开。然后在这个断路器的状态转换之后,调用侦听器/绑定(如果您使用的是springcloudstream)来停止/暂停使用者。因此,在断路器再次关闭之前,您的消息将保持在队列/主题上&您不必发送死信消息或将它们放入错误队列/主题。您可以参考下面的链接以获得详细的解决方案,该解决方案使用resilience4jfor circuit breaker实现和spring cloud streamfor consumer。https://dublincoders.com/circuit-breaker-kafka/
3条答案
按热度按时间uyhoqukh1#
鉴于:
服务a生成主题t事件e1
服务b使用来自主题t事件e1的消息并调用远程rest服务r1
然后:
由于服务a和服务b通过主题t进行交互,因此不需要背压。
您需要关闭服务b和远程rest服务r1之间的电路。为此,只需使用spring boot@hystrixcommand并在“fallbackmethod”方法中抛出一个异常。这将不会提交偏移量,并且只要电路开路,您将重新使用事件e1。
我就是这样做的:-)如果你找到了更好的方法请分享!
unhi4e5o2#
死信队列重试(dlq)是处理用户故障的好模式,断路器模式是处理生产者问题的好模式。
kfgdxczn3#
如果要在下游服务或数据库关闭时停止使用消息,可以参考此解决方案。
例子
消费者正在呼叫服务
服务a正在调用外部http服务b
您想在外部服务b关闭时设置断路器
在这种情况下,您可以在服务a上设置断路器。每当外部服务b关闭时,此电路将断开。然后在这个断路器的状态转换之后,调用侦听器/绑定(如果您使用的是springcloudstream)来停止/暂停使用者。因此,在断路器再次关闭之前,您的消息将保持在队列/主题上&您不必发送死信消息或将它们放入错误队列/主题。
您可以参考下面的链接以获得详细的解决方案,该解决方案使用resilience4jfor circuit breaker实现和spring cloud streamfor consumer。
https://dublincoders.com/circuit-breaker-kafka/