春季的RabbitMQ(非春季启动)自动接线不起作用

时间:2020-05-24 09:13:50

标签: java spring rabbitmq

我想将rabbitmq与我的spring应用程序集成。所以, 我在pom.xml

中添加了以下几行
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.2.7.RELEASE</version>
        </dependency>

然后我创建了一个名为RabbitMessageService的服务


@Component
public class RabbitMessageService{

    @Autowired
    private RabbitTemplate rabbitTemplate;

public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("testExchange","testKey",message);
    }

}

问题是,当我从另一个控制器调用此方法时,RabbitTemplate @Autowire注释不起作用,并且RabbitTemplate变为null。 RabbitMessageService.sendMessage("Hello rabbit");

我所缺少的。这个存储库的pom文件看起来正确还是我需要导入其他内容?有太多的存储库,所以我很困惑应该导入哪一个?为什么自动装配在此处为空? 我尝试使用get set进行初始化,但send方法仍然无法正常工作(可能需要手动设置连接属性,但不确定如何执行此操作)

1 个答案:

答案 0 :(得分:1)

Spring Boot为您自动配置RabbitTemplate。如果使用的是普通香草Spring,则应在RabbitTemplate中将ApplicationContext定义为bean。

@Configuration
@EnableRabbit // Enable @RabbitListener support
public class RabbitConfig {

  @Bean
  public ConnectionFactory connectionFactory() {
      return new CachingConnectionFactory("localhost");
  }

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

  @Bean
  public RabbitTemplate rabbitTemplate() {
      return new RabbitTemplate(connectionFactory());
  }

}