1. 程式人生 > >RabbitMq與spring cloud bus整合serverConfig熱載入及介紹

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配置檔案內容了