找不到[com.comcast.activation.message.interfaces.messagechannels]类型的符合条件的bean作为依赖项:

ffvjumwh  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(233)

我有一个spring-boot应用程序,它只向kafka主题发送消息。代码如下所示。

@RestController
@RequestMapping("/ActivationQueueService")
public class ActivationQueueController {

private static final Logger LOGGER = LoggerFactory
        .getLogger(ActivationQueueController.class);

@Autowired
SpringCloudStreamClient producer;

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new ActivationDataInfoValidator());
}

@RequestMapping(method = RequestMethod.POST, value = "/sendMessage", headers = "Accept=application/json", produces = "application/json")
public void sendMessage(@RequestBody  ActivationDataInfo message)
        throws JsonProcessingException {

    LOGGER.debug("Activation Data Request Recieved : " + message.toString());
    if (message != null) {
        ObjectMapper mapper = new ObjectMapper();
        producer.sendMessagetoKafka(message);
        LOGGER.info("Activation Data Request sent to Kafka : " + message);
    }
}

}

接口:

public interface MessageChannels {

   @Output("activationMsgQueue")
    MessageChannel save();
}

制作人:

@Service
@EnableBinding(MessageChannels.class)
public class SpringCloudStreamClient {

private static final Logger LOGGER = LoggerFactory
        .getLogger(SpringCloudStreamClient.class);

@Autowired MessageChannels msgChannel;

public Object sendMessagetoKafka(ActivationDataInfo msg){
    LOGGER.info("Sending Message : " + msg);
    msgChannel.save().send(MessageBuilder.withPayload(msg).build());
    return new String("Success");
}
}

此应用程序作为独立应用程序运行良好。当我用这个创建一个jar并将其包含到另一个spring boot应用程序中,以便使用producer向topic发送消息并运行spring boot应用程序时,我得到以下异常:
无法示例化springcloudstreamclient.,原因是
:找不到[com.comcast.activation.message.interfaces.messagechannels]类型的符合条件的bean作为依赖项:至少需要1个符合此依赖项的autowire候选bean。
我得到上面的例外为下面的代码行

@Autowired SpringCloudStreamClient producer;

我使用组件扫描来确保jar中的包被父spring引导应用程序扫描。在这样做之后,我得到了上面的异常。enable binding annotation没有执行它应该执行的操作,即在此场景中创建消息通道接口的实现。这是虫子还是我遗漏了什么?

mkh04yzy

mkh04yzy1#

一般来说, @EnableBinding(MessageChannels.class) 属于配置而不是bean(它是用 @Configuration ). 您的第二个应用程序似乎无法识别它,这不会触发代理生成过程。不过,我仍然看到它是作为bean生成的,由 @Service 注解。一个简单的方法就是做一个 @Import(SpringCloudStreamClient.class) 在父应用程序中,尽管组件扫描应该将其引入。
你父母的配置怎么样?

相关问题