Я пытаюсь установить максимальное количество попыток из моего приложения на кролика-брокера. у меня повторных попыток перехватчик,Весной amqp кролик Максимальное количество попыток подключения к потребителю
@Bean
public RetryOperationsInterceptor retryOperationsInterceptor() {
return RetryInterceptorBuilder.stateless()
.maxAttempts(CommonConstants.MAX_AMQP_RETRIES)
.backOffOptions(500, 2.0, 3000)
.build();
}
и это используется внутри слушателя контейнера,
container.setAdviceChain(new Advice[]{retryOperationsInterceptor()});
Тем не менее, после нескольких повторных попыток, потребитель пытается установить соединение сначала в виде бесконечной петли,
2017-02-21 15:03:12.229 WARN 9292 --- [nsumerThread_92] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect
2017-02-21 15:03:12.229 INFO 9292 --- [nsumerThread_92] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2017-02-21 15:03:13.245 WARN 9292 --- [nsumerThread_93] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect
2017-02-21 15:03:13.245 INFO 9292 --- [nsumerThread_93] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2017-02-21 15:03:13.261 ERROR 9292 --- [nsumerThread_83] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).
Я хочу, чтобы приложение потерпело неудачу и отказало из-за отсутствия возможности подключения к брокеру после ограничения MAX_RETRY #.
спасибо за помощь
EDIT
Как было предложено @ Artem-Биланом, я закончил с использованием Component
public class BrokerFailureEventListener implements ApplicationListener<ListenerContainerConsumerFailedEvent>
В этом классе onApplicationEvent
я подсчитал количество отказов и затем предпримите соответствующие действия.
В случае производителя стороны, это немного другой сценарий. Как пояснил @ artem-bilan, приложение должно будет заботиться о любых проблемах. Я исследовал с использованием netflix-hystrix
и добавил метод fallback
для производственного метода и пойдет по этому маршруту. Большое спасибо.
ok great Artem. Я смог добавить слушателя и подсчитать неудачи там и выйти из приложения.Мне было интересно, есть ли способ отключить приложение, но прекратить обработку AMQP? то есть может быть остановлено все потребители или контейнер listenercontainer? Большое спасибо – user3169330
Это неважно. Просто извлеките соответствующие компоненты из cxt и вызовите их 'stop()'. –
спасибо Артем, имеет смысл, теперь все это на стороне потребителя, но что происходит с продюсером, использующим rabbitTemplate, какое событие выбрано или используется механизм повтора? Если бы я хотел остановить попытки или предотвратить бесконечные попытки? – user3169330