【发布时间】:2015-01-29 06:05:04
【问题描述】:
我无法运行attached Spring Boot sampler application。它有一个 AMQP 启动器,需要 RabbitMQ。从根本上说,它是一个简单的应用程序,只需将消息发送到绑定了队列的 RabbitMQ Exchange。我收到以下错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.company.messaging.MessageDeliveryManager com.company.exec.Application.messageDeliveryManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.company.messaging.MessageDeliveryManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
Application.java
package com.company.exec;
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
MessageDeliveryManager messageDeliveryManager;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public void run(String... args) throws Exception {
messageDeliveryManager.sendMessage(String message);
}
}
MessageDeliveryManager.java
package com.company.messaging;
public interface MessageDeliveryManager {
void sendMessage(String message);
}
MessageDeliveryImpl.java
package com.company.messaging;
public class MessageDeliveryManagerImpl implements MessageDeliveryManager {
@Value("${app.exchangeName}")
String exchangeName;
@Value("${app.queueName}")
String queueName;
@Autowired
RabbitTemplate rabbitTemplate;
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
DirectExchange exchange() {
return new DirectExchange(exchangeName);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(queueName);
}
public void sendMessage(String message) {
rabbitTemplate.send(queueName, message);
}
}
如果有人可以查看并提供关于我做错了什么的建议,我将不胜感激。
【问题讨论】:
-
这个 MessageDeliveryManager 类有什么?我认为该错误是由其他一些 bean 故障引起的。你能看到其他与 RMQ 相关的错误消息吗?
-
MessageDeliveryManager是一个接口,由MessageDeliveryManagerImpl实现。 Impl 类实现了合约定义的方法,注解为@Service。 -
请将接口
MessageDeliveryManager以及该接口和类Application的实现添加到您的问题中。 -
MessageDeliveryManagerImpl所在的包是否被Spring Boot扫描过?如果不是,则 bean 在上下文中不可用。 -
@Jens 因为我附上了项目源代码,所以我没有将代码粘贴到问题中。我仍然会添加它。感谢您提出建议。
标签: spring rabbitmq spring-boot autowired