在這裏插入圖片描述html
前四個字母分別是Naming 和 Configuration 的前兩個字母,最後的s爲Service。git
Nacos 就是註冊中心 + 配置中心的組合github
Nacos 官網 :https://nacos.io/zh-cn/web
GitHub:https://github.com/alibaba/Nacospring
Nacos 支持基於 DNS 和基於 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO註冊 Service 後,服務消費者可使用DNS TODO 或HTTP&API查找和發現服務。docker
Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。對於複雜的雲環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。bootstrap
在docker上安裝nacosapi
拉取nacos鏡像:瀏覽器
docker pull nacos/nacos-server
運行nacos:服務器
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
在瀏覽器輸入:http://ip地址:8848/nacos/ 帳號和密碼都是nacos。
官方文檔:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html
<dependencies>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 120.92.164.250:8848 #配置的Nacos地址(本機的寫localhost:8848,服務器的寫IP地址)
management:
endpoints:
web:
exposure:
include: '*'
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id){
return "nacos registry, serverPort: " + serverPort + "\t id: " + id;
}
}
在這裏插入圖片描述
<dependencies>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引用本身定義的api通用包,可使用Payment支付Entity -->
<dependency>
<groupId>com.angenin.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: 120.92.164.250:8848 #配置的Nacos地址(本機的寫localhost:8848,服務器的寫IP地址)
#消費者要訪問的微服務名稱(成功註冊進nacos的服務提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class, args);
}
}
@Component
@FeignClient(value = "nacos-payment-provider")
public interface PaymentFeignService {
@GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id);
}
@RestController
public class OrderNacosController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping("/consumer/payment/feign/nacos/{id}")
public String paymentInfo2(@PathVariable("id") Integer id){
return paymentFeignService.getPayment(id);
}
}
Nacos全景圖Nacos和CAP(同時支持 cp + ap)
AP 和 CP的切換
A : 可用性 B:一致性 C:分區容錯性
如何選擇模式:
Nacos默認AP。
切換CP
<dependencies>
<!-- nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
bootstrap.yml:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 120.92.164.250:8848 #Nacos服務註冊中心地址(本機的寫localhost)
config:
server-addr: 120.92.164.250:8848 #Nacos做爲配置中心地址(本機的寫localhost)
file-extension: yml #指定yml格式配置
application.yml
spring:
profiles:
active: dev #表示開發環境
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
@RefreshScope //支持Nacos的動態刷新功能
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
官網:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
`
7. 啓動3377 瀏覽器輸入:http://localhost:3377/config/info
實時刷新
在這裏插入圖片描述
實際開發中,一般一個系統會準備
- dev開發環境
- test測試環境
- prod生產環境
在這裏插入圖片描述
相似Java裏面的package名和類名 最外層的nameSpace是能夠用於區分部署環境的,Group和DataID邏輯是那個區分兩個目標對象
在這裏插入圖片描述
Data ID 區分
在這裏插入圖片描述
Group 區分
Namespace方案