Я пытаюсь настроить RabbitMQ с помощью Spring Boot. Ниже приведен снимок моего класса конфигурации.
Случай 1:
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
Этот код отлично работает.
Код 2:
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
// template.setMessageConverter(new Jackson2JsonMessageConverter()); // Line 1 - works
// template.setMessageConverter(messageConverter); // Line 2 - error: asks to inject Bean
return template;
}
В этом случае, однако, код работает нормально, если я использую строку 1, где я создаю объект Jackson2JsonMessageConverter.
Но я пишу этот код, чтобы понять работу уже существующего кода, где вместо строки 1 используется строка 2. Поэтому, когда я использую строку 2 вместо строки 1, я получаю сообщение об ошибке:
Рассмотрите возможность определения bean-компонента типа 'org.springframework.amqp.support.converter.MessageConverter' в вашей конфигурации.
Итак, у меня есть 2 вопроса:
- Почему эта ошибка?
Если я определю bean-компонент для MessageConverter, скажем
@ Bean publi c MessageConverter createMessageConverter () {вернуть новый Jackson2JsonMessageConverter (); }
тогда это работает. Тогда почему он не просит меня определить bean-компонент для аргумента ConnectionFactory?
PS: не используется ни @Autowired, ни здесь, ни в коде, который я пытаюсь понять, и оба аргумента, ConnectionFactory и MessageConverter, являются интерфейсы а не классы