Я довольно новичок в AMQ, я понимаю концепцию создания сообщения, отправки его в очередь и использования его асинхронно.Остановить AMQ MessageListenerAdapter при исключении
Мои основные конфигурации Spring являются следующие
@Bean
public DefaultMessageListenerContainer listenerContainer(
MessageListenerAdapter adapter) {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setMessageListener(adapter);
dmlc.setDestinationName("myQueue");
dmlc.setConcurrentConsumers(5);
return dmlc;
}
@Bean
MessageListenerAdapter adapter(MyClass myClass) {
MessageListenerAdapter messageListener = new MessageListenerAdapter(
myClass);
messageListener.setDefaultListenerMethod("myMethod");
return messageListener;
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jt = new JmsTemplate(connectionFactory());
return jt;
}
У меня нет проблемы с отправкой вещи в очередь с jmsTemplate.convertAndSend(), а затем ПОЛУЧАТЬ их MyClass # MyMethod
Моя проблема: Мне нужно, чтобы слушатель остановил потребление сообщений, если выбрано исключение. Обычно исключение скажет мне, что удаленный сайт отключен, и попробуйте позже. Если я не остановлю все эти сообщения, они в основном потеряются. Хотелось бы сохранить очередь до тех пор, пока я не смогу отправить ее снова.
Возможно ли это?
Я только что узнал, что я был на авто-ack немного назад. Пробовал Session.CLIENT_ACKNOWLEDGE, который говорит, что в очереди останутся неудавшиеся сообщения, но он застрял в одном сообщении до тех пор, пока не будет доставлен, никаких мыслей? – javaNoober
Вам необходимо установить политику доставки. http://activemq.apache.org/redelivery-policy.html CLIENT_ACK не подходят для всех ситуаций, хотя существуют и другие исключения, которые не будут обрабатываться. В этой документации есть хорошее объяснение того, что каждый режим предоставляет по умолчанию http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/listener/AbstractMessageListenerContainer.html –