我有一个只需将消息发送到kafka主题的spring启动应用程序。代码看起来像这样。没有发现依赖关系的[com.comcast.activation.message.interfaces.MessageChannels]类型的合格bean:
@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");
}
}
此应用程序运行正常作为独立的应用程序。当我创建一个罐子出来,并将其包含到另一个春季启动应用程序,以便我可以使用生产者发送消息到主题并运行春季启动应用程序我得到以下异常:
无法实例化SpringCLoudStreamClient。,reason
:找不到符合条件的[com.comcast.activation.message.interfaces.MessageChannels]类型的符合条件的bean:期望至少1个符合此依赖关系自动装配候选资格的bean。
我得到了下面的一行代码
@Autowired SpringCloudStreamClient producer;
我已经使用组件扫描,以确保在JAR包由父春天启动的应用程序扫描上面的异常。这样做后,我得到了上述例外。启用绑定注释并没有做它应该做的事情,那就是在这个场景中创建一个消息通道接口的实现。这是一个错误还是我错过了什么?
你是怎么制作罐子的?你的依赖是什么? – Ulises
执行gradle build会生成一个弹簧启动应用程序的jar。 –