1、nacos簡介
nacos 既可以做註冊中心又可以做配置中心
2、nacos服務端下載與啓動
nacos服務器啓動 (windows環境)
1、下載nacos發行包,直接運行startup.cmd。
2、下載源碼,通過下面命令運行
打包:mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
進入下面目錄:distribution/target/nacos-server-$version/nacos/bin
運行startup.cmd。
nacos默認訪問地址:http://localhost:8848/nacos
建議不用127.0.0.1訪問(有bug),用本地ip或者localhost訪問。
配置中心
添加如下配置
common.properties
server.host=localhost
nacos-member.properties
member.username=zhangsan
nacos-order.properties
order.no=20001
3、nacos客戶端
3.1、提供者-會員中心(springcloud-2.0-nacos-member)
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringCloud nacos 註冊中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<!-- SpringCloud nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
bootstrap.yml
###訂單服務的端口號
server:
port: 8000
###服務別名----服務註冊到註冊中心名稱
spring:
application:
name: nacos-member
####consul註冊中心地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
### 配置文件後綴
# file-extension: yml
### 組名
# group: dev-group
shared-dataids: common.properties
控制器
package com.mine.api.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class NacosMemberController {
@Value("${server.host}")
private String host;
@Value("${server.port}")
private String port;
@Value("${member.username}")
private String username;
@RequestMapping("/getMember")
public String getMember() {
return "i am " + username + " from " + host + ":" + port;
}
}
啓動類
package com.mine.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosAppMember {
public static void main(String[] args) {
SpringApplication.run(NacosAppMember.class, args);
}
}
3.2、消費者-訂單中心(springcloud-2.0-nacos-order)
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringCloud nacos 註冊中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<!-- SpringCloud nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
bootstrap.yml
###訂單服務的端口號
server:
port: 8001
###服務別名----服務註冊到註冊中心名稱
spring:
application:
name: nacos-order
####consul註冊中心地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
### 配置文件後綴
# file-extension: yml
### 組名
# group: dev-group
shared-dataids: common.properties
控制器
package com.mine.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class NacosOrderController {
@Autowired
private RestTemplate restTemplate;
@Value("${server.host}")
private String host;
@Value("${server.port}")
private String port;
@Value("${order.no}")
private String orderNo;
@RequestMapping("/getOrder")
public String getOrder() {
String url = "http://nacos-member/getMember";
String object = restTemplate.getForObject(url, String.class);
return "orderNo is " + orderNo + " from " + host + ":" + port + ", " + object;
}
}
啓動類
package com.mine.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosAppOrder {
public static void main(String[] args) {
SpringApplication.run(NacosAppOrder.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
nacos做配置中心
支持自定義擴展的 Data Id 配置
Spring Cloud Alibaba Nacos Config 從 0.2.1 版本後,可支持自定義 Data Id 的配置。
# config external configuration
# 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties
# 2、Data Id 不在默認的組,不支持動態刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默認的組,也支持動態刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
配置共享的 Data Id
spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties
配置優先級
Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置。
A: 通過 spring.cloud.nacos.config.shared-dataids 支持多個共享 Data Id 的配置
B: 通過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置
C: 通過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置
當三種方式共同使用時,他們的一個優先級關係是:A < B < C