当前位置: 首页 > 知识库问答 >
问题:

带断路器的Kafka消费者,使用弹性4J的重试模式

沈畅
2023-03-14

我需要一些帮助来理解我如何能够提出一个解决方案使用Spring boot、Kafka、Resilence4J来实现来自我的Kafka消费者的微服务调用。假设微服务关闭了,那么我需要使用断路器模式通知我的Kafka消费者停止获取消息/事件,直到微服务启动并运行。

共有1个答案

萧晓博
2023-03-14

如果您使用的是Spring Kafka,则可以使用ConcurrentMessageListenerContainer类的PauseResume方法。您可以将EventListener附加到断路器,它侦听状态转换并暂停或恢复事件处理。将CircuitBreakerRegistry注入bean

circuitBreakerRegistry.circuitBreaker("yourCBName").getEventPublisher().onStateTransition(
                        event -> {
                            switch (event.getStateTransition()) {
                                case CLOSED_TO_OPEN:
                                    container.pause();
                                case OPEN_TO_HALF_OPEN:
                                    container.resume();
                                case HALF_OPEN_TO_CLOSED:
                                    container.resume();
                                case HALF_OPEN_TO_OPEN:
                                    container.pause();
                                case CLOSED_TO_FORCED_OPEN:
                                    container.pause();
                                case FORCED_OPEN_TO_CLOSED:
                                    container.resume();
                                case FORCED_OPEN_TO_HALF_OPEN:
                                    container.resume();
                                default:
                            }
                        }
                );
 类似资料:
  • 有没有一种方法实现一个断路器模式与SpringKafka为基础的消费者。我想知道,在实现我的Spring kafka consumer时,如果基于某个外部系统的数据处理失败并引发网络错误,是否可以停止使用记录。但是,如果解决了网络问题,消费者应该再次正常处理。

  • 我想用Resilience4j来处理容错,我用的是断路器和定时器限制。 我想分离业务逻辑的容错行为,不要“弄脏”我的业务代码。 2-我如何有这个应用程序的许多实例,断路器为每个实例单独工作?我是对的?

  • 我正面临使用Spring Cloud Resilience 4j的断路器实现的问题。 在一些教程之后,我尝试在项目中添加必要的依赖项。此外,尝试添加配置,但电路仍然没有打开,并且没有调用回退方法。 对于用例,我正在从我的服务调用外部 API,如果该外部 API 关闭,那么在几次调用后,我需要启用断路器。 请从不同的文件中找到代码片段。 我是断路器模式的新手。我们将非常感谢您的帮助。 pom.xml

  • 断路器将处于闭合或半断开状态无限时间,直到达到最小的呼叫次数,对吗?有什么办法我可以设置什么时候没有调用在数量的时间,它将转为关闭状态?另外,在半开状态下,是否有可能使最小呼叫数大于允许的呼叫数?谢谢。

  • 我可以看到,我可以使用以下代码以编程方式将状态设置为强制打开:CircuitBreaker强制打开状态 但是有没有一种方法可以设置一个属性,在应用程序启动时立即将状态设置为此,以便可以与测试一起使用呢?

  • 我正在尝试实现Spring kafka消费者,它需要在处理事件时出现某个异常后暂停(例如:在将事件信息存储到DB时,DB已关闭)。 我们如何在spring boot-2.3.8(spring kafka)中使用Resilience4j断路器方法来处理这种情况 寻找一些消费者暂停和恢复的例子。 在Kafka,listerner只是想捕捉解析错误。如果出现5个以上的解析错误,则需要停止侦听器。但我不确