1. 程式人生 > 其它 >Spring Boot之IntelliJ IDEA RabbitMQ

Spring Boot之IntelliJ IDEA RabbitMQ

問題描述

在使用spring boot中使用spring-boot-starter-amqp 處理RabbitMQ操作時,使用以下程式碼建立DirectExchange

@Bean("directExchange")
public DirectExchange directExchange() {
  return new DirectExchange("test", true, false);
}
  • 目的:當服務啟動時自動建立相應DirectExchange
  • 結果:本地使用IntelliJ IDEA啟動服務可以建立,使用maven package打包後,用java -jar啟動服務後,沒有建立

原因分析

相關依賴

去掉spring-boot-starter-actuator依賴後就都無法建立

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

IntelliJ IDEA 文件

具體說明:https://www.jetbrains.com/help/idea/spring-boot.html#spring-boot-endpoints

Spring Boot文件

具體說明: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

結論

因為Spring Boot actuator預設暴露JMX所有節點,IntelliJ IDEA啟動預設開啟JMX,而用命令java -jar 預設不會開啟JMX.這樣在IntelliJ IDEA啟動Spring Boot 後,觸發了org.springframework.boot.actuate.health.HealthEndpoint 從而使用了預設的org.springframework.amqp.rabbit.connection.CachingConnectionFactory#createConnection

獲取RabbitMQ連線,並建立相關DirectExchange

記錄技術成長之路