#spring-boot #spring-amqp
#spring-boot #spring-amqp
Вопрос:
Я добавил это как попытку создать и настроить свой собственный SimpleRabbitListenerContainerFactory
для замены по умолчанию
@Bean
open fun myFactory(cf: ConnectionFactory): SimpleRabbitListenerContainerFactory {
val factory = SimpleRabbitListenerContainerFactory()
factory.setConnectionFactory(cf)
factory.setDefaultRequeueRejected(false)
factory.setAfterReceivePostProcessors(MessagePostProcessor {
it.messageProperties.contentType = MediaType.APPLICATION_JSON_VALUE
return@MessagePostProcessor it
})
return factory
}
Когда код выполняется, я все еще вижу
o.s.a.r.listener.BlockingQueueConsumer : Rejecting messages (requeue=true)
это наводит меня на мысль, что spring boot не использует мой ContainerFactory. Полагаю, мне действительно все равно, использует ли он мой, если я могу настроить его правильно. Каков наилучший способ решить эту проблему?
Ответ №1:
Смотрите документацию.
Платформа ищет фабрику с именем rabbitListenerContainerFactory
по умолчанию, если вы не задали containerFactory
свойство в аннотации.
По умолчанию инфраструктура ищет компонент с именем rabbitListenerContainerFactory в качестве источника для использования фабрикой …
Чтобы переопределить компонент Boot, назовите его rabbitListenerContainerFactory
.
При этом, как правило, лучше всего использовать конфигуратор, чтобы были применены ваши свойства загрузки…
@Bean(name = "rabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setDefaultRequeueRejected(false)
factory.setAfterReceivePostProcessors(MessagePostProcessor {
it.messageProperties.contentType = MediaType.APPLICATION_JSON_VALUE
return@MessagePostProcessor it
})
return factory;
}