RabbitMq與spring cloud bus整合serverConfig熱載入及介紹
RabbitMq是一個訊息佇列的程式。。用來在各個應用之前相互通訊。這裡主要是給spring cloud叢集做廣播用的。
rabbitMq消費者-生產者模式。一端不停的寫入資訊,另一端可以讀取和訂閱佇列中的資訊。
安裝好之後,啟動服務即可。通過localhost:15672即可訪問,預設有guest/guest密碼。
安裝需要先安裝erlang這個平臺,然後安裝rabbit,最好每一步都用管理員許可權來安裝開啟。
spring cloud中整合rabbitMq
在pom中新增,相應的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
application.yml配置檔案,增加rabbitMq的訪問地址以及埠,還要登入的使用者名稱和密碼,用來連線binding、獲得佇列資訊等。
spring:
rabbitmq:
host: 192.168.xx.xx
port: 5672
username: test
password: test
首先我們需要建立一個佇列。
@Configuration public class RabbitConfig { @Bean public Queue helloQueue() { return new Queue("hello"); } }
我們在生產者,不斷往佇列傳送訊息。
@Autowired private AmqpTemplate amqpTemplate; @RequestMapping(value = "/provide", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public String service() { String input = "我是提供者"; this.amqpTemplate.convertAndSend("hello",input+"通過rabbitmq發訊息給你!"); return input; }
接受者,可以在當前應用,也可以是其他應用。也就是其他的專案組。不過需要連線同樣的rabbitMq。
接受hello佇列訊息,可以是多個,預設只要有一個接受,其他的就不會接受了。也可以配置全部接受等。
@Component
@RabbitListener(queues = "hello")
public class Receiver {
@RabbitHandler
public void process(String msg) {
System.out.println("Receiver:" + msg);
}
}
這是一個簡單的 rabbitMq的應用。。
在實際專案中,我們通過rabbitMq對配置檔案(在git等上面)進行熱載入。
我們需要配置,一個配置檔案管理服務server-config。專門設定哪個git下面的配置檔案
引入pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
配置檔案----注意:看最後一句。不是我寫錯,真的是冒號。srping的一個坑,如果用uml就不會出現這種問題。。所以建議大家用yml
這個配置檔案服務,依然註冊到
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
git的訪問路徑
spring.cloud.config.server.git.uri=
搜尋哪個路徑下的配置檔案
spring.cloud.config.server.git.search-paths=
spring.cloud.config.label=master
使用者名稱
spring.cloud.config.username
密碼
spring.cloud.config.password
宣告暴露的介面,用來在客戶端你重新整理使用
management.endpoints.web.exposure.include: bus-refresh
在啟動類,增加註解
這是服務端提供服務,我們需要客戶端,讓客戶端來讀取git的配置檔案。包括後面的熱載入配置檔案。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
bus-amqp,會幫你
它幫你提供了actuator/bus-refresh訪問實現。只需要訪問,就可以重新整理git的配置檔案。我們只需修改git的配置檔案就可以重新整理本地的配置檔案。
客戶端配置檔案:
1.首先客戶端也是作為eureka的服務。
spring.application.name=configclient
server.port=8782
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:${server.port}/eureka/
接下來才配置作為配置檔案,,
bootstrap檔案會比application先讀取。
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=service-config
spring.cloud.config.uri= http://192.168.xx.xxx:8781/
spring.cloud.config.label=master
spring.cloud.config.profile=dev
management.security.enabled=false
spring.cloud.bus.trace.enabled=true
management.endpoints.web.exposure.include: bus-refresh
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
最後我們配置啟動類,以及測試的方法
啟動後,env的屬性值,是在git的配置檔案中的。我們發現可以獲取到。
想要實時更新,執行localxxxxx/bus-refresh即可更新。。。這裡不提供get方法。。。所以需要用post來發送這個請求。
然後就獲取到最新的git配置檔案內容了