Заполняется при использовании RabbitMQ с использованием Spring-AMQP.
Просто нужно получить способ настройки AutomaticRecoveryEnabled и NetworkRecoveryInterval с использованием Spring-AMQP. Существует прямая опция установки этих флагов, если вы разрабатываете собственную библиотеку RabbitMQ. Но я не нашел обходного пути, чтобы сделать то же самое, используя весну
Использование RabbitMQ Native library (не нужно никакой помощи)
factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(10000);
Использование Spring-AMPQ (нужна помощь)
Как и выше, я не нашел такого метода при попытке использовать Spring-AMPQ. Это то, что я делаю сейчас.
@Bean(name="listener")
public SimpleMessageListenerContainer listenerContainer()
{
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueueNames(env.getProperty("mb.queue"));
container.setMessageListener(new MessageListenerAdapter(messageListener));
return container;
}
Любая помощь в этом отношении очень заметна. Заранее спасибо.
Ну, у CachingConnectionFactory
есть другой CachingConnectionFactory
для применения com.rabbitmq.client.ConnectionFactory
.
Таким образом, этого достаточно, чтобы скомпоновать последний в качестве дополнительного @Bean
с соответствующими параметрами и ввести его в CachingConnectionFactory
.
RabbitTemplate
дня. Вы можете использовать его на стороне производителя или просто добавить шаблон повторения в RabbitTemplate
- вы можете получить некоторые нежелательные побочные эффекты при использовании этой опции с SimpleMessageListenerContainer
поскольку контейнер ничего не знает о восстановленных потребителях.
Просто для уточнения; Spring AMQP НЕ совместим с automaticRecoveryEnabled
.
Он имеет свои собственные механизмы восстановления и не знает о том, как происходит восстановление, выполняемое клиентом. Это оставляет свисающие соединения и Канал (ы).
Я работаю над временным обходом, который сделает его совместимым (но эффективно отключит восстановление клиентов любыми соединениями/каналами, используемыми Spring AMQP, оставив восстановление клиента на месте для других пользователей той же фабрики соединений.
Для более долговременного исправления потребуется переписывать контейнер слушателя вместо использования кода восстановления клиента.
RetryTemplate
в RabbitTemplate
для издателей.