1.下載及配置nacos服務端,並啓動nacos
首先到github下載nacos.zip文件,然後解壓文件. .打開目錄結構,到目錄 bin/nacos-mysql.sql文件,將文件運行到自己的數據庫中。然後打開application.properties文件,修改mysq連接
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
然後進入到 bin目錄 如果是windows 啓用startup.cmd。如果是linux 啓用startup.sh命令。
打開瀏覽器 輸入http://localhost:8848/nacos 默認賬號 nacos /nacos。可以看到下面頁面
首先我創建了一個空間 test 然後創建了兩個yml文件。
特別要注意我打標記的地方。
2、創建測試project 並配置nacos
首先創建springboot項目 然後pom中引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config-server</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
然後再啓動類加上@EnableDiscoveryClient註解。
現在我們創建了一個springboot項目 然後將配置文件重命名 bootstrap.yml。下面展示配置
server:
port: 8001
test:
nacos:
namespace: a4dbaa04-04fe-48bc-80b8-58360e508b54
group: bo
server-addr: localhost:8848
spring:
application:
name: biz-server
cloud:
nacos:
discovery:
server-addr: ${test.nacos.server-addr}
namespace: ${test.nacos.namespace}
config:
file-extension: yaml
server-addr: ${test.nacos.server-addr}
namespace: ${test.nacos.namespace}
group: ${test.nacos.group}
ext-config:
- data-id: basic-common.yaml
group: ${test.nacos.group}
refresh: true
test標籤下面的nacos配置,這個是我們自定義的。主要是爲了方便切換,然後spring.application.name這個是biz-server ,在nacos中必須有biz-server.yaml 要不然會保存的,在中間可以添加一個環境變量,默認會給你去掉。
然後最主要的配置實在 discovery中,首先配置上面自定義的字段值,然後config下面配置了第一張圖片打箭頭的有地址 命名空間還有組別等等。然後ext-config是引用其他的自定義yaml的配置文件。
配置好後,啓動項目,因爲我再bootstrp.yml配置了端口爲8001 在biz-server配置了8100,項目啓動後,會啓動端口8100,配置文件會覆蓋掉bootstrap.yml中的數據。
自定義一個controller寫個測試看是否能拿到變量
@RestController
@RequestMapping("/api/")
public class TestController {
@Value("${test.sms.url}")
private String url;
@GetMapping("/getUrl")
public String getConfig(){
return url;
}
}
測試結果是能拿到值。
3、動態獲取數據
項目已經啓動,拿到的url 是baidu.com 那現在我們在配置環境的修改配置,我們刷新頁面是不生效的。
對controller做如下配置就可以了
@RestController
@RequestMapping("/api/")
@RefreshScope
public class TestController {
@Value("${test.sms.url}")
private String url;
@GetMapping("/getUrl")
public String getConfig(){
return url;
}
}
成功的動態刷新,如果獲取的變量是一個component那麼並不需要使用@RefreshScope便可以動態刷新。
對於nacos和eureka1.0做比較,我感覺nacos比較方便,且註冊中心和配置中心在一起。如果使用eureka,那麼還需要去做配置中心還要集合消息隊列,會很麻煩,所以我極力推崇大家微服務的時候使用nacos來做註冊中心和配置中心