Spring Cloud Alibaba+Nacos搭建微服務架構

  • 2021 年 2 月 17 日
  • 筆記

1. Spring Cloud Alibaba 簡介

   Spring Cloud Alibaba是阿里巴巴為分佈式應用提供的一站式解決方案,能夠更方便快捷地搭建分佈式平台,nacos擁有着替換eureka server ,spring cloud config等組件的目標和意圖,旨在能夠更簡便快速地去管理服務、註冊服務、管理配置。

2. Spring Cloud Alibaba +Nacos搭建微服務架構

集成nacos

1. 啟動nacos server

nacos 官方學習文檔: //nacos.io/zh-cn/docs/quick-start.html
下載nacos: //github.com/alibaba/nacos/releases 
也可以使用如下命令安裝並編譯項目:

git clone //github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  

項目構建完畢後,會在\nacos\distribution\target\ 目錄下生成對應的包:
在這裡插入圖片描述

在這裡插入圖片描述

進入到/nacos/bin 目錄下 D:\Program Files\nacos\distribution\target\nacos-server-1.4.2-SNAPSHOT\nacos\bin:
在這裡插入圖片描述
執行命令 startup.cmd -m standalone, 以單例模式啟動nacos服務器:

cd D:\Program Files\nacos\distribution\target\nacos-server-1.4.2-SNAPSHOT\nacos\bin
d:
startup.cmd -m standalone

啟動成功後,會出現如下logo:
在這裡插入圖片描述
訪問: //192.168.31.166:8848/nacos/index.html, 用戶名和密碼都是nacos,登錄成功後,就可以看到如下的nacos首頁:
在這裡插入圖片描述

2. 微服務客戶端集成spring cloud alibaba +nacos server

  自己建的項目相當於一個微服務客戶端,在本例中就是一個nacos客戶端,要想將服務註冊到nacos server中,我們需要做三件事

1)在pom.xml文件中添加依賴

nacos客戶端依賴:

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

pom.xml文件完整配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.exam.springcloud</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba</name>
    <description>project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--引入nacos client依賴-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>


    </dependencies>


    <!--引入spring cloud alibaba 的下載地址-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2)在application.properties|application.yml| bootstrap.yml(選一即可)添加nacos客戶端配置

在項目中添加properties配置, 各配置的作用和含義類似於eureka的配置, 如下作出解釋:

#指定微服務服務名稱
spring.application.name= user
#指定nacos服務地址
spring.cloud.nacos.server-addr=localhost:8848
#指定註冊中心地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
#暴露所有web端點
management.endpoints.web.exposure.include=*
3) 開啟服務發現註冊

在應用的啟動類上添加註解 @EnableDiscoveryClient

通過以上步驟添加好配置後,接下來啟動服務,如果註冊成功了,會在控制板上看到新建的user服務已經註冊到nacos上去。
在這裡插入圖片描述
再次查看nacos服務列表,可以看到user服務已經註冊到nacos 註冊中心上去。
在這裡插入圖片描述

如果還有其他服務,那麼採用相同的方式進行註冊即可。

3. 微服務的使用

   由於Spring Cloud Alibaba是基於Spring boot進行集成的,服務間的調用仍然可以使用RestTemplate+ribbon進行調用,或者使用Feigin組件來實現服務間的調用, 以下文章能夠幫助理解服務發現、服務註冊一級服務調用。

文章列表:
Eureka服務發現註冊詳解
使用Ribbon+RestTemplate來實現微服務間的調用
從零開始搭建Feign客戶端