Springcloud-Alibaba 〖十三〗Nacos來啦!!
PS: github倉庫倉庫地址項目都放到裏面了
一. Springcloud-Alibaba
官網地址:Springcloud-Alibaba
- 服務限流降級: 默認支持Servlet. Feign. RestTemplate、 Dubbo 和RocketMQ限流降級功能的接入,可以在運行時通過控制檯實時修改限流降
級規則,還支持查看限流降級Metrics監控。 - 服務註冊與發現: 適配Spring Cloud服務註冊與發現標準,默認集成了Ribbon的支持。
- 分佈式配置管理: 支持分佈式系統中的外部化配置,配置更改時自動刷新。
- 消息驅動能力: Spring Cloud Stream爲微服務應用構建消息驅動能力。阿里雲對象存儲:阿里雲提供的海量、安全、低成本、可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- 分佈式任務調度: 提供秒級、精準、可靠可用的定時(基於Cron表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有Worker (schedulerx- client). 上執行。
- 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
二. Nacos安裝
前四個字母分別爲Naming和Configuration的前兩個字母,最後的s爲Service。
Nacos就是註冊中心+配置中心的組合 Nacos=Eureka+Config+Bus
Nacos:官網下載地址
下載解壓後,找到nacos/bin目錄下的startup.cmd命令點開
默認的賬號密碼都是 nacos,進入local:8848/nacos就可以進入我們的控制檯
三. Nacos做服務註冊中心 9001項目
首先你的父POM一定要有Springcloud-Alibaba依賴
3.1 項目目錄
3.2 pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.aiguigu.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment9001</artifactId>
<!--本pom.xml引入nacos-->
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.3 application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*' #監控
3.4 主啓動
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
3.5 業務類
controller層
package com.atguigu.springcloud.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
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;
}
}
3.6 測試
首先來測試方法,可以訪問到
這時候我們來訪問Nacos的UI界面,發現服務已經註冊上來
點開詳情可以看見更多信息
四. 集羣測試
4.1 配置集羣(偷懶的辦法~)
這時候可以從已經配置過的9001複製一份模板來
這時候我們啓動9011服務
4.2 測試
打開我們的Nacos控制檯發現實例數量爲2
測試方法9001
測試方法9011
4.3 爲了更好演示集羣,這裏還是重新創建一個9002項目
4.3.1 項目目錄
基本與9001一樣,只是端口號不一樣,所以以下只貼出步驟,不演示(一模一樣的還讓我演示?orz)
4.3.2 建pom
4.3.3 application.yml
4.3.4 主啓動
4.3.5 業務類(controller層)
4.3.6 測試
五. 新建module cloudalibaba-consumer-nacos-order83
Nacos天生支持負載均衡因爲依賴引入了ribbon
5.1 項目目錄
5.2 pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.aiguigu.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-consumer-nacos-order83</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.aiguigu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</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.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>
</project>
5.3 application.yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消費者將要去訪問的微服務名稱(成功註冊進nacos的微服務提供者),在這配置了訪問的服務,業務類就不用在定義常量了
service-url:
nacos-user-service: http://nacos-payment-provider
5.4 主啓動類
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class,args);
}
}
5.5 業務類
controller層
package com.atguigu.springcloud.alibaba.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class OrderNacosController {
/*
因爲在yml中配置了service-url.nacos-user-service,
這裏不需要再定義要訪問微服務名常量,而是通過boot直接讀出來
*/
@Value("${service-url.nacos-user-service}")
private String serverURL;
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id){
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
5.6 測試
這裏我們在Nacos看見消費者已經註冊進來了
這時我們來測試負載均衡,訪問controller層方法一次是9001,一次是9002,負載均衡測試成功!
六. 總結
組件名 | 語言 | CAP | 服務監控檢查 | 對外暴露接口 | Springcloud集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | Go | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客戶端 | 已集成 |
Nacos | Java | AP/CP | 支持 | HTTP/DNS/UDP | 已集成 |