添加用户定义的消息转换器后无法自动连接处理器

时间:2018-11-06 08:41:32

标签: apache-kafka spring-cloud spring-cloud-stream

在Finchley.SR2上,这是代码

@Configuration
@EnableAutoConfiguration
@SpringBootApplication
@EnableBinding(Processor.class)
@RestController
public class Application {
    private static Logger log = LoggerFactory.getLogger(Application.class);

    @Autowired
    private Processor processor;

    @Autowired
    MappingJackson2MessageConverter testConverter;

    @Bean
    @StreamMessageConverter
    MappingJackson2MessageConverter createTestConverter(){
        return new MappingJackson2MessageConverter();
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

当我启动时,我得到了

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.stream.messaging.Processor' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

但是,如果我取出@StreamMessageConverter,则可以成功自动连接处理器。

我该怎么做才能同时保留自定义的消息转换器和自动连线的处理器?谢谢!

1 个答案:

答案 0 :(得分:1)

这里发生了很多事情,所以让我们尝试解析它。 。

第一个问题,为什么需要自动接线以下内容?

@Autowired
private Processor processor;

您通常不需要直接与Processor进行交互,因为该框架已用于框架中,以在绑定程序公开的远程目标与您的消息处理程序之间提供委托/连接模型。 此外,您的实际问题与生命周期有关,这可能是对我们而言较小但无害的错误,并且可能与在同一配置类中配置和自动装配处理器有关。

第二:

 @Configuration
 @EnableAutoConfiguration
 @SpringBootApplication

您只需要一个

 @SpringBootApplication

第三:

为什么需要配置MappingJackson2MessageConverter?内容类型转换是框架的透明功能,尽管我们确实提供了配置自定义消息转换器的功能,但您正在配置的内容已经由框架配置,并且实际上是七个预先配置的消息转换器堆栈中的第一个

最后一个问题:

您正在尝试做什么?您能解释一下用例吗?