【问题标题】:Spring retry - can @Recover be in standalone class?春季重试 - @Recover 可以在独立类中吗?
【发布时间】:2020-05-10 19:07:15
【问题描述】:

我有一个带有多个端点的 Spring Integration 应用程序,它们以不同的方式处理相同的数据。

它们都有相同的“@Recover”方法,这些方法已经成为样板并且看起来很脆弱。

您能否集中 @Recover 方法(例如在独立类中)和/或您能否指定如何找到此 @Recover 注释方法?

【问题讨论】:

    标签: spring spring-integration spring-retry


    【解决方案1】:

    目前尚不清楚为什么在 Spring Integration 中使用 @Retryable,而 RequestHandlerRetryAdvicehttps://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain...

    无论如何在@Retryable上看到这个选项:

    /**
     * Retry interceptor bean name to be applied for retryable method. Is mutually
     * exclusive with other attributes.
     * @return the retry interceptor bean name
     */
    String interceptor() default "";
    

    因此,您可以提供自己的方法,而不是 @Recover

        @Bean
        public MethodInterceptor retryInterceptor() {
            return RetryInterceptorBuilder.stateless()
                         .maxAttempts(...)
                         .recoverer(...)
                         .build();
        }
      ...
      @Retryable(interceptor = "retryInterceptor")
        public void service() {
    

    【讨论】:

    • 我没有使用 RequestHandlerRetryAdvice 的原因是我看不到没有 XML 的注释/集成方式 - 我的 MessagingGateway/Gateway 和 ServiceActivator 是简单的注释,可以避免臃肿的 XML 和 Retryable 适合我的使用-案例(只是网络故障,因为端点与 FTP、SharePoint 等集成,只是想集中记录失败).....除非您可以推荐另一种方法。总的来说,我喜欢拦截器在你的回答中是明确的;意味着其他开发人员即使不熟悉 Spring Integration 也可以弄清楚。
    • @ServiceActivatoradviceChain。你可以在那里配置RequestHandlerRetryAdvice
    猜你喜欢
    • 2012-06-23
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多