问题标签 [spring-retry]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
752 浏览

java - 使用基于 Annotation 的 Spring Retry 在运行时动态更改拦截器

我正在使用基于注释的 Spring Retry。下面是我的界面:

共有三个类实现了这个接口来调用下游服务。我想定义 RetryInterceptors,这样对于每个下游调用,我​​应该能够定义一个单独的重试策略。本质上,我想在运行时更改 RetryInterceptor 。

在 Spring 中有没有一种方法可以在运行时更改 RetryInterceptor 并使代码使用特定的 RetryOperationsInterceptor?

0 投票
1 回答
2062 浏览

apache-kafka - 当目标系统关闭时,停止 Spring Cloud Stream @StreamListener 监听

我有一个从 Kafka 获取消息并调用目标系统来更新旧版 Oracle 数据库的应用程序。

我想启用一个场景,如果目标系统关闭,则将消息留在 Kafka 总线上,并且在给定的时间段内不处理它们。我正在考虑一些基于断路器 Hystrix 的解决方案,但我找不到任何机制来告诉 Spring Cloud Stream“停止”事件监听。我能想到的唯一其他选择是如果断路器打开,将这些消息传输到错误/重新处理主题,但这对我来说听起来像是一种反模式。我应该能够暂停系统处理事件,这是微服务应用程序中发布/订阅的全部优势。

任何帮助都将不胜感激。

0 投票
1 回答
875 浏览

java - 在 Spring Integration 应用程序中,是否可以在链外测试 Spring Retry 机制?

我继承了一个包含 Spring Retry 的 Spring Integration 项目。我不确定它是否已经过测试,也没有单独的测试。所以我试图用一个简单的场景来练习它。

通过模拟 RestTemplateexchange方法,我希望能够测试重试逻辑。我可以得到我想要抛出的异常,但它只发生一次 - 没有重试发生。

重试建议的 XML 在这里(retry-advice-context.xml):

这是一个 SI 处理文件的一部分:

所以重试 beanretryAdvice是不同链的一部分。链还有很多,所以我只想能够从服务层检查重试逻辑。代码中的任何地方都没有 Retry 注释(不知道是否需要)。

几个问题:

  1. 我可以从服务层测试重试功能还是需要执行整个链?
  2. 是否缺少重试机制所需的任何内容(注释、其他 XML)?

顺便说一句,这是使用 SI 4.1.3。

谢谢。

更新 1:

设法让 Gary 的项目在我的环境中运行。之后,我将retry-advice-context.xml文件添加到主 SI xml 中。我将地图更改为仅RuntimeException在其中。日志语句显示ExponentialBackoffPolicy语句。我还得到了RetryTemplate调试日志语句。

有了更多的了解,我将那里的内容翻译成我正在使用的真实代码并取得了更大的成功。我收到了我的异常发生的日志语句,最多将重试 3 次。

不幸的是,我得到的是:

所以它最初知道它应该重试最多 3 次。但随后它声明它在 1 次重试后进行了最后一次尝试。

在 Gary 的工作代码中,调试语句将显示Retry: count=2等...用于下一次连续尝试。

sleep在应进行重试期间,Spock 测试代码中有一条语句。我既延长又缩短了时间,没有任何改变。

将继续尝试并通过重试代码进行调试,以查看为什么它在第一次重试时停止。

0 投票
2 回答
7856 浏览

java - 带有注释的 Spring Retry 框架不起作用

我使用 SimpleRetryPolicy/RetryTemplate 尝试了带有简单 java 类的 spring 重试框架。它工作得很好。所以我想对注释做同样的事情。注释从未对我有用。网上也没有太多帮助。下面的代码就像普通的 Java 程序一样工作,在第一次尝试时抛出异常,这不是预期的行为。在抛出异常或从中恢复之前,它应该至少尝试了 5 次。不知道我哪里出错了。我是否需要为此进行任何 XML/spring AOP 配置才能工作?那会怎样

我在接口和实现的顶部尝试了@Retryable(maxAttempts=5),但没有任何区别。

0 投票
1 回答
2044 浏览

java - 为多个 API 调用配置 Spring Boot 重试

我有一个 Spring Boot api 应用程序,它有一个 POST 端点,让我们称之为 /doSomething 作为方法。当接收到 /doSomething 端点的请求时,我需要将该数据保存在我们的应用程序上,然后需要对另一个 api[A] 发出 GET 请求该请求必须从 API [B] 获取,然后再次发布到 API [B]。在这种情况下,处理 spring 重试的最佳方法是什么。

请找到以下代码

IntegrationServiceBean 类

我的问题是,如果对集成服务 bean 应用重试,是否会对应用程序的主要部分产生性能影响,例如在主端点上保存数据。

什么是最佳实践

0 投票
1 回答
335 浏览

java - Spring batch 3,IBM JVM 上的配置加载错误(BackToBackPatternClassifier)

使用 IBM 的 JRE 1.7 启动春季批处理作业时出现错误。

Spring Batch 版本是 3.0.7,Spring 版本是 4.3.5

Oracle JDK 1.7 不会发生此错误。它出现在我加载我的 Spring Batch XML 配置时,jobs-configuration.xml 甚至在工作开始之前。这个问题出现在我升级 Spring Batch 和 Spring 之后: org.springframework.batch.classify.BackToBackPatternClassifier from Spring Batch 变成 org.springframework.classify.BackToBackPatternClassifier (in Spring Retry)

工作配置.xml:

和 ClassifierCcsb01Writer:

0 投票
1 回答
6060 浏览

java - 在spring bean的基类中定义的方法中使用@Retryable不会重试

我有一个 B 类型的 Spring 托管 bean。我在 @Configuration 类中有 @EnableREtry。当我使用 @Retryable on 时doStuff(),该方法会按预期在失败时重试。

但是,我真正想重试的方法是在基类A中定义的方法。A是一个具体的类,而不是一个spring托管的bean。该doSomethingElse方法不会在抛出异常时重试。

我真的希望 doSomethingElse 被重试,基类方法。但是,我不确定如何执行此操作。我猜这是因为 A 是一个具体的类而不是一个 bean,尽管它确实是一个基类。

我需要在 A 类中使用 RetryableTemplate 吗?

0 投票
1 回答
5146 浏览

spring - @Retryable 没有被触发

我试图归结为最简单的重试方案。执行时将忽略重试。

应用程序.java:

这是在一个服务类中:

0 投票
2 回答
21380 浏览

spring - @Recover 方法不会被 @Retryable 触发

我在开始工作后关注了这个问题。该函数正在重试。ExhaustedRetryException@Retryable@Retryable

这是具有该@Retryable功能的代表:

这是带有函数调用者的类:

以及包含@EnableRetry注释的 Application 类:

这是我运行该@Retryable函数时的堆栈跟踪:

0 投票
2 回答
904 浏览

dropwizard - 将 Spring-retry 与 Dropwizard 一起使用

是否可以在 dropwizard 中使用 spring-retry?或者,为此,在 dropwizard 中是否有类似 spring-retry 的东西?