Как создать / настроить собственную AMQP ContainerFactory в Spring Boot? - PullRequest
0 голосов
/ 13 марта 2019

Я добавил это как попытку создать и настроить свой собственный 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)

, который приводитмне поверить, что весенняя загрузка не использует мой ContainerFactory.Полагаю, мне все равно, использует ли он мой, могу ли я правильно его настроить.Какой лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 13 марта 2019

См. документацию .

. Фреймворк ищет фабрику с именем rabbitListenerContainerFactory по умолчанию, если в аннотации не установлено свойство containerFactory.

По умолчанию инфраструктура ищет компонент с именем rabbitListenerContainerFactory в качестве источника для фабрики, чтобы использовать его для ...

Для переопределения компонента загрузки, назовите его 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;
}
...