账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    rabbitmq某消息重试会导致其后到的消息被阻塞吗?
    • 2019-09-09 00:00
    • 10
    49
    0

    利用RetryOperationsInterceptor做重试机制,假如某个消息抛异常重试,会导致这个消息之后的来的消息一直被阻塞吗?还是这个重试的消息被插到队尾,让其他消息消费?

           @Bean
            SimpleRabbitListenerContainerFactory lowLoadRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
                SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory()
                factory.connectionFactory = connectionFactory
                factory.concurrentConsumers = 1
                factory.maxConcurrentConsumers = 1
                factory.recoveryInterval = 1000L
                factory.setAdviceChain(retryOperationsInterceptor())
                return factory
            }
    
            @Bean
            RetryOperationsInterceptor retryOperationsInterceptor() {
                RetryTemplate retryTemplate = new RetryTemplate()
                RetryPolicy retryPolicy = new SimpleRetryPolicy(Integer.MAX_VALUE)
                retryPolicy.setMaxAttempts(5)
                ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy()
                backOffPolicy.setInitialInterval(60000)
                backOffPolicy.setMultiplier(2)
                backOffPolicy.setMaxInterval(3600000)
                retryTemplate.setRetryPolicy(retryPolicy)
                retryTemplate.setBackOffPolicy(backOffPolicy)
                retryTemplate.registerListener(new RetryListener() {
                    @Override
                    <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
                        return true
                    }
    
                    @Override
                    <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        if (throwable != null) {
                            log.error("Failed: Retry count " + context.getRetryCount(), throwable)
                        }
                    }
    
                    @Override
                    <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        log.error("Retry count " + context.getRetryCount(), throwable)
                    }
                })
                RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless()
                        .retryOperations(retryTemplate)
                        .build()
    
                return interceptor
            }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 混吃等死 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部