java - 无法在 MessageListener 类 AMQP 中 Autowiring bean

标签 java spring rabbitmq amqp autowired

好的。所以我有一个带有一些常量的兔子配置类,我尝试向我的监听器容器监听器添加服务。

@Configuration
public class RabbitConfig {

@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory(HOST);
    connectionFactory.setPort(CONN_PORT);
    connectionFactory.setUsername(USERNAME);
    connectionFactory.setPassword(PASSWORD);
    return connectionFactory;
}

@Bean
public AmqpAdmin amqpAdmin() {
    return new RabbitAdmin(connectionFactory());
}

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
    rabbitTemplate.setReplyQueue(replyQueue());
    rabbitTemplate.setCorrelationKey(UUID.randomUUID().toString());
    return rabbitTemplate;
}

@Bean
public Queue replyQueue() {
    return new Queue(REPLY_QUEUE_NAME);
}

@Bean
public SimpleMessageListenerContainer messageListenerContainer() {

    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
    container.setQueueNames(QUEUE_NAME);
    container.setMessageListener(messageListener());
    return container;
}

@Bean
public MessageListener messageListener(){
    return new RabbitListener();
}

}

我正在尝试将我的项目中的服务注入(inject)到在最后几行创建的消息监听器中。这会触发无法 Autowiring 字段的错误,就好像该字段不是由 Spring 管理的一样。我做了一些研究,验证了我的组件扫描包,并将其设置为所有项目,我用@Component注释了rabbitlistener,所以我无法真正找到错误或为什么Spring无法 Autowiring 我的监听器类中的字段。这是代码。

@Component
public class RabbitListener implements MessageListener {
Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
ImagesService imagesService;


@Override
public void onMessage(Message message) {
//processing message
}

请问有什么想法吗?

最佳答案

如果您能分享完整的 StackTrace 会更好,但我建议您这样做:

  1. 为您的@Configuration类添加@ComponentScan,并在其中指定您的RabbitListenerImagesService类所在的包

  2. @Component 标记最后两个(是的,我在您的 RabbitListener 上看到了这一点,但不清楚您的 ImagesService 在哪里以及它是如何绕过它的)

  3. @Autowire RabbitListenerRabbitConfig 而不是 @Bean

并且要小心 @Component@Bean 混合:当然,如果您有用于该包的 @ComponentScan,您最终会得到两个 bean。

关于java - 无法在 MessageListener 类 AMQP 中 Autowiring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725724/

相关文章:

java - 如何在spring-boot中从application.properties创建配置类?

javascript - 使用 MySQL Community Server 和 jQuery AJAX 的 RESTful Web 服务

java - Java中 "return methodA() || methodB()"的用途是什么

java - 我想知道BLE gatt设置的完成时间(如回调)

Spring Batch 'RunIdIncrementer' 未生成下一个值

spring - 在Grails中注销时如何清除Spring Security的RememberMe cookie

c# - 跨集群的 MassTransit 请求和响应

events - RabbitMQ 消费者断开连接事件

terminal - RabbitMQ 服务器错误

java - Postgres UUID JDBC 不工作