【发布时间】:2020-07-11 18:50:14
【问题描述】:
我正在尝试使用 Spring Boot 配置 RabbitMQ。下面是我的配置类的快照。
案例一:
@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 的对象,则代码可以正常工作。
但我编写此代码是为了了解已经存在的代码的工作原理,其中使用了第 2 行而不是第 1 行。因此,当我使用第 2 行而不是第 1 行时,出现错误:
考虑在你的配置中定义一个 'org.springframework.amqp.support.converter.MessageConverter' 类型的 bean。
所以我有两个问题:
- 为什么会出现这个错误?
-
如果我为 MessageConverter 定义一个 bean,比如说
@豆 公共 MessageConverter createMessageConverter() { 返回新的 Jackson2JsonMessageConverter(); }
然后就可以了。那为什么不要求我为 ConnectionFactory 参数定义一个 bean?
PS:这里没有使用@Autowired,也没有在我试图理解的代码中使用,ConnectionFactory 和 MessageConverter 这两个参数都是接口而不是类
【问题讨论】:
标签: java spring spring-boot rabbitmq spring-rabbit