為什麼需要註冊中心?
在分散式架構中,服務會註冊到這裡,當服務需要呼叫其它服務時,就到這裡找到服務的地址,進行呼叫;服務管理,核心是有個服務登錄檔,心跳機制動態維護 ;
服務註冊
建立普通SpringBoot工程(spring-cloud-alibaba-service-user)該工程當前用於使用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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-service-user</artifactId>
<version>0.0.1</version>
<dependencyManagement>
<dependencies>
<!-- 依賴管理父工程 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-version-parent</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 公共模組 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- web服務 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- undertow伺服器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!-- 引數校驗 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- nacos 服務治理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<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>
</dependencies>
</project>
application.yaml
server:
port: 8080
spring:
application:
name: service-user
cloud:
nacos:
discovery:
#註冊中心地址
server-addr: localhost:8848
#服務後設資料
metadata:
version: 0.0.1
appname: ${spring.application.name}
UserServiceApplication.java
/**
* 使用者中心服務啟動類
*
* @author wentao.wu
*/
@EnableDiscoveryClient//服務註冊
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
HelloWorldController.java
/**
* HelloWorld Web
*
* @author wentao.wu
*/
@RequestMapping(value = "/hello/")
@RestController
public class HelloWorldController {
@GetMapping("/say/{name}")
public Response<String> say(@PathVariable("name") String name) {
Response<String> response = new Response<>();
response.setCode("1");
response.setMsg("你好啊," + name + "!");
return response;
}
}
以上內容是整個工程當前的內容,直接執行訪問:http://localhost:8080/hello/say/nacos,後者輸出:
{
"code": "1",
"msg": "你好啊,nacos!",
"errorCode": null,
"errorMsg": null,
"result": null
}
看到以上返回內容代表整個服務完全啟動成功。進入nacos管理介面:http://localhost:8848/nacos 預設登入賬號與密碼為 nacos/nacos
進入服務管理選單->服務列表就能夠看到我們註冊進去的服務。
點選詳情即可檢視服務後設資料:
從Nacos之中服務列表能夠看到我們所註冊的服務意味這服務已經註冊到Nacos Server端。
多環境服務隔離
用於進行租戶粒度的配置隔離。不同的名稱空間下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
在資源不夠的情況下,開發環境(dev),綜合測試環境(sit),業務測試環境(uat)通常會公用一套Nacos Server,使用Namespace 來區分環境,然後再通過dataID來指定每個服務的配置檔案,這樣就可以每個環境的服務註冊發現不會相互干擾,並且也不會用到其他環境的配置檔案。
建立名稱空間
從Nacos選單中名稱空間點選新建名稱空間,輸入空間名稱與描述,名稱空間ID可填可不填,不填則會自動生成一串UUID的字元。
記錄自動生成的名稱空間ID:7e3699fa-09eb-4d47-8967-60f6c98da94a
工程使用對應的名稱空間
application.yaml
server:
port: 8080
spring:
application:
name: service-user
cloud:
nacos:
discovery:
server-addr: localhost:8848
metadata:
version: 0.0.1
appname: ${spring.application.name}
#指定名稱空間 對應dev環境
namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
#指定分組 案例組
group: EXAMPLE-GROUP
#指定叢集環境 華南
cluster-name: HuaNan
這裡新增了3個配置。
Namespace:使用dev環境的名稱空間id指定該服務部署在dev環境下與其他名稱空間服務進行隔離。
Group: 標識該服務屬於哪個專案組。
Cluster-name:標識該服務部署在華南地區。
Nacos Server最終由namespace->group->ServiceID->Cluster-name獲取到對應的服務例項列表。
配置好之後執行UserServiceApplication.java對服務進行重啟,重啟之後服務將重新註冊到Nacos中並且在Web介面服務列表中Dev名稱空間進行顯示。
注意事項
Namespace與Group配置後只有Namespace與Group相同的才能夠算作一套系統,只有同一套系統才能夠內部進行快速訪問,如使用feign進行遠端呼叫時,GROUP=金融系統與GROUP=電商系統兩個不同的GROUP在其中是不能夠直接通過Feign服務發現進行訪問的,對應的業務服務只會發現對應Namespace與Group中的服務。
原始碼程式碼存放地址
gitee: https://gitee.com/SimpleWu/spring-cloud-alibaba-example.git
cnblogs: https://www.cnblogs.com/SimpleWu
持續更新目錄:https://www.cnblogs.com/SimpleWu/p/15476427.html