一、SpringCloud Alibaba Nacos 介紹
Nacos 為 SpringCloud Alibaba 下的一款集 服務注冊與發現、服務配置管理于一體的微服務管理平台。
其中在服務管理中處了服務的注冊與發現基本功能外還實作了服務調用的負載均衡以及服務的健康監控。服務配置管理相比SpringCloud Config 的配置操作簡單,達到了修改即生效效果。
Nacos 基本架構圖及領域模型圖
Nacos 也是分為服務端和用戶端,服務端即Nacos管理平台應用服務,微服務應用通過接入到Nacos服務端中,通過服務端控制台頁面可以進行服務管理以及配置管理。用戶端即我們的需要接入的微服務工程,通過引入Nacos相應的依賴(服務注冊發現依賴,或者配置中心管理依賴)以及其他配置接入到服務端,來實作通過Nacos進行服務配置管理。
領域模型,即我們在使用Nacos配置中心或服務注冊管理時的一個概念,我們在确定一個唯一的配置鍵值對時,需要确定其命名空間(NameSpace)和命名空間下的某分組資訊(Group),以及分組下的配置檔案(Service/DataId),明确該三項後即可确定該鍵值對從哪裡進行讀取。命名空間通常用來區分不同環境如開發、測試、生産,分組用來對服務進行分組,每個分組下的服務Service 肯能有多個中心,比如上海中心、西安中心(可通過配置區分),每個service可以有多個服務執行個體instance;
二、Nacos 服務端搭建
windows 端搭建:
1,啟動安裝檔案nacos-server-1.2.1.zip下載下傳
下載下傳位址:https://github.com/alibaba/nacos/tags ,選擇具體版本後,點選zip 檔案進行下載下傳
2,下載下傳後進行解壓 ,并啟動
3,通路登陸
nacos 預設端口 8848 ,通路位址 http://127.0.0.1:8848/nacos 預設賬戶密碼 nacos/nacos
2,linux端搭建:
參見《Alibaba Nacos Linux下的叢集安裝與mysql持久化資料》
三、服務提供者端接入Nacos 服務注冊中心
環境:SpringBoot 2.2.2.RELEASE + SpringCloud Hoxton.SR1 + SpringCloud Alibaba 2.1.0.RELEASE
主要步驟:
- 建立工程,引入依賴
- 編寫配置檔案
- 編寫主啟動類
- 編寫業務代碼
1,建立 product_service_nacos工程,并引入相應依賴。pom.xml 如下
<?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>
<groupId>com.xiaohui.springCloud</groupId>
<artifactId>SpringCloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>product_service_nacos</artifactId>
<dependencies>
<!-- 公共子產品 -->
<dependency>
<groupId>com.xiaohui.springCloud</groupId>
<artifactId>cloud-api-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- SpringCloud Alibaba nacos 主要 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web 依賴開始 -->
<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>
<!-- web 依賴結束 -->
<!-- 資料庫層相關依賴 開始 -->
省略。。。
<!-- 資料庫層相關依賴 結束 -->
<!-- 熱部署依賴 -->
<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>
</project>
2,建立配置檔案application.yml
server:
port: 8001 #服務端口
spring:
application:
name: nacos-payment-service #服務名稱
cloud:
nacos:
discovery:
server_addr: 127.0.0.1:8848 #配置nacos位址
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://192.168.17.132:3306/springcloud?characterEncoding=UTF-8
username: root
password: root
management:
endpoints:
web:
exposure:
include: '*'
logging:
level:
root: INFO
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.xiaohui.springcloud.entities
其中比較重要的配置部分:
spring.cloud.nacos.discovery.server_addr 指定Nacos的注冊服務位址
management.endpoints.web.exposure.include 進行暴露監控端點
3,編寫主啟動類
package com.xiaohui.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class,args);
}
}
注意需要給主啟動類添加@EnableDiscoveryClient 啟動服務發現功能
4,編寫業務代碼
package com.xiaohui.springcloud.controller;
import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.entities.Payment;
import com.xiaohui.springcloud.service.IPaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
public class PaymentController {
@Autowired
IPaymentService paymentService;
@Value("${spring.cloud.client.ip-address}")
private String ip;
@Value("${server.port}")
private String port;
@GetMapping("/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id){
Payment payment = paymentService.getPaymentById(id);
log.info(payment.toString());
if(payment != null){
return new CommonResult(0,"查詢成功 server node:"+ip+":"+port,payment);
}else{
return new CommonResult(-9999,"查詢失敗,不存在資訊 server node:"+ip+":"+port,null);
}
}
}
5,啟動測試
啟動Nacos 服務後,再啟動服務該提供者工程,我們在服務清單下的預設public命名空間,預設分組DEFAULT_GROUP下可以看到該微服務已經注冊進來