Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 带卡夫卡耗电元件的断路器_Spring_Apache Kafka_Kafka Consumer Api_Circuit Breaker - Fatal编程技术网

Spring 带卡夫卡耗电元件的断路器

Spring 带卡夫卡耗电元件的断路器,spring,apache-kafka,kafka-consumer-api,circuit-breaker,Spring,Apache Kafka,Kafka Consumer Api,Circuit Breaker,是否有一种方法可以通过基于消费者的弹簧卡夫卡实现断路器模式。我想知道,在实现我的Spring kafka consumer时,如果基于某个外部系统处理数据失败并引发网络错误,是否可以停止使用记录。但是,如果网络问题得到解决,则用电设备应再次正常处理。使用死信队列(DLQ)重试是处理用电设备故障的良好模式,断路器模式是处理生产商问题的良好模式。给出: 服务A生成主题T事件e1 服务B使用主题T事件e1并调用远程REST服务r1 然后: 由于服务A和B通过主题T进行交互,因此不需要背压 您需要

是否有一种方法可以通过基于消费者的弹簧卡夫卡实现断路器模式。我想知道,在实现我的Spring kafka consumer时,如果基于某个外部系统处理数据失败并引发网络错误,是否可以停止使用记录。但是,如果网络问题得到解决,则用电设备应再次正常处理。

使用死信队列(DLQ)重试是处理用电设备故障的良好模式,断路器模式是处理生产商问题的良好模式。

给出:

  • 服务A生成主题T事件e1
  • 服务B使用主题T事件e1并调用远程REST服务r1
然后:

  • 由于服务A和B通过主题T进行交互,因此不需要背压
  • 您需要关闭服务B和远程REST服务r1之间的电路。要做到这一点,您只需使用spring boot@HystrixCommand并在“fallbackMethod”方法中抛出一个异常。这将不会提交偏移量,只要电路开路,您将重新使用事件e1

我就是这样做的:-)如果你找到了更好的方法,请分享

如果要在下游服务或数据库关闭时停止使用消息,可以参考此解决方案

范例

  • 消费者正在呼叫服务A
  • 服务A正在调用外部HTTP服务B
  • 您想在外部服务B关闭时设置断路器
在这种情况下,您可以在服务A上设置断路器。当外部服务B关闭时,此电路将断开。然后,在这个断路器的状态转换时,调用您的侦听器/绑定(如果您使用的是SpringCloudStream)来停止/暂停消费者。因此,在断路器再次关闭之前,您的消息将保持在队列/主题上&您不必写死信消息或将它们放入错误队列/主题

您可以参考下面的链接以了解详细的解决方案,该解决方案使用弹性4j用于断路器实施&spring cloud stream用于消费者


您可以使用apache camel实现这一点。看看有没有人能给我分享这个URL的github链接