Apache kafka 添加用户定义的消息转换器后,无法自动连接处理器
在Finchley.SR2上,下面是代码Apache kafka 添加用户定义的消息转换器后,无法自动连接处理器,apache-kafka,spring-cloud,spring-cloud-stream,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
@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);
}
}
当我开始工作的时候,我
原因:org.springframework.beans.factory.NoSuchBean定义异常:没有可用的“org.springframework.cloud.stream.messaging.Processor”类型的合格bean:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowiredrequired=true}
但是如果我取出@StreamMessageConverter,处理器可以成功地自动连接
我应该怎么做才能同时保持我的自定义消息转换器和自动连线处理器?谢谢 这里有很多事情要做,所以让我们试着分析一下 第一个问题,为什么需要自动连接以下内容
@Autowired
private Processor processor;
通常,您不需要直接与处理器交互,因为框架使用它来提供绑定器公开的远程目标和消息处理程序之间的委托/连接模型
此外,您的实际问题与生命周期有关,这可能是我们这边的一个小而无害的错误,可能与在同一配置类中配置和自动布线处理器有关
第二:
@Configuration
@EnableAutoConfiguration
@SpringBootApplication
你只需要一个
@SpringBootApplication
第三:
为什么需要配置MappingJackson2MessageConverter?内容类型转换是框架的一项透明功能,虽然我们提供了配置自定义消息转换器的功能,但您正在配置的消息转换器已经由框架配置,实际上是七个预配置消息转换器堆栈中的第一个
最后一个问题:
你想做什么?你能解释一下你的用例吗?另外,你在用@RestController做什么?谢谢你的快速回复!我将用我们自己的MessageConverter替换默认的MessageConverter,因为我们希望向消息中添加更多元数据。这就是为什么这个代码段是从现有代码复制粘贴,然后简化的原因。我使用MappingJackson2MessageConverter只是为了重现行为——我从我们自己定制的消息转换器开始,它只回答了一个问题,但正如我所说的,有很多事情在进行,我无法理解,所以我给了你一些指示,希望能有所帮助。你可以做的另一件事是创建一个复制该问题的简单项目,并将其推送到Github或任何其他回购协议,这样我们就可以看看你是多么正确!一旦我将我的处理器放在一个单独的组件中,并在一个单独的配置中启用绑定,问题就消失了。非常感谢你的指点!