且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用 spring rabbitmq 在不同队列中配置超时、重试或最大尝试次数

更新时间:2022-05-10 22:07:43

就我而言,我必须创建一个带有重试拦截器的侦听器工厂,在重试拦截器中我设置了最大尝试次数.

In my case I had to create a listener factory with a retry interceptor, in the retry interceptor I set the value for max attempts.

也许适合你:

@Autowired
private ConnectionFactory connectionFactory;

@Autowired
private SomeService someService;

@RabbitListener(id = "queueListener", queues = "queueName",
        containerFactory = "listenerContainerFactory")
@RabbitHandler
public void notifyLegacyListener(SomeObject obj) {
    someService.doSomething(obj);
}

@Bean
public SimpleRabbitListenerContainerFactory listenerContainerFactory() {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setMessageConverter(jsonMessageConverter());
    factory.setConcurrentConsumers(3);
    factory.setMaxConcurrentConsumers(10);
    factory.setAdviceChain(new Advice[] {retries()});
    return factory;
}

@Bean
public RetryOperationsInterceptor retries() {
    return RetryInterceptorBuilder.stateless().maxAttempts(Queues.QUEUE_LEGACY.getMaxAttempts())
            .backOffOptions(1000,
                    3.0, 10000)
            .recoverer(new RejectAndDontRequeueRecoverer()).build();
}

@Bean
public MessageConverter jsonMessageConverter() {
    return new Jackson2JsonMessageConverter();
}