Spring Cloud Alibaba基礎教程:Nacos服務發現與配置管理

隨着微服務概念的流行,愈來愈多的公司採用Spring Cloud全家桶構建微服務系統,實現業務的快速迭代。Spring Cloud提供了快速構建分佈式微服務經常使用組件,包括Spring Cloud EurekaSpring Cloud RibbonSpring Cloud HystrixSpring Cloud Zuul等等。依賴Spring強大生態環境,其已經成爲Java開發人員構建微服務系統首選解決方案。html

本系列文章將帶你們認識另外一個微服務解決方案Spring Cloud Alibaba。依託於Alibaba強大的技術支撐,以及Eureka2.x再也不維護等因素,相信不久的未來Spring Cloud Alibaba將會成爲大多數公司進行微服務實踐的更優選擇。java


下面向你們介紹Nacos的服務註冊發現與配置管理功能。git

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。github

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以「服務」爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。web

1、註冊發現

首先須要下載Nacos,下載完成直接解壓,接下來啓動Nacosspring

cd nacos/bin
// Linux/Unix/Mac
sh startup.sh -m standalone
// Windows
cmd startup.cmd -m standalone

上面即便用獨立的方式啓動Nacos,啓動完成以後訪問Nacos首頁,默認登陸帳號和密碼都是nacosapache

登陸成功以後,能夠看見以下圖
filebootstrap

接下來建立一個服務註冊到Nacosapi

  1. 首先建立一個父項目管理依賴,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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <modules>
        <module>service-provider</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-cloud-alibaba-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>alibaba-demo</name>
    <packaging>pom</packaging>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.1.RELEASE</spring-cloud-alibaba.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
  1. 而後建立子模塊service-providerpom.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>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-provider</artifactId>

    <dependencies>
        <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>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

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

</project>
  1. service-provider模塊中添加bootstrap.yml配置文件,文件內容以下:
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: service-provider
  main:
    allow-bean-definition-overriding: true
server:
  port: 8080

上面的配置指定了服務註冊發現地址bash

  1. 啓動類代碼
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }

}

而後啓動service-provider,便可在Nacos的服務列表中觀察到已經註冊上去的服務
file

經過Nacos提供的Open-API能夠看到已經註冊的服務列表

➜  ~ curl -X GET '127.0.0.1:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10'
{"count":1,"doms":["service-provider"]}%                                         
➜  ~

到此已經完成的服務註冊的基本使用,接下來介紹配置管理的使用

2、配置管理

爲了方便,我直接對service-provider項目進行改造演示

  1. 修改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>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-provider</artifactId>

    <dependencies>
        <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>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

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

</project>

新增了spring-cloud-starter-alibaba-nacos-config依賴

  1. 修改bootstrap.yml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
  application:
    name: service-provider
  main:
    allow-bean-definition-overriding: true
server:
  port: 8080

上面的配置指定配置管理服務地址

  1. 修改啓動類代碼
@RefreshScope
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceProviderApplication {
    @Value("${config.test}")
    private String testConfigValue;

    @GetMapping("/config")
    public String getConfigValue() {
        return testConfigValue;
    }

    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }

}

添加@RefreshScope是支持動態配置更新

  1. 添加Nacos配置文件

file

而後啓動項目觀察控制檯日誌輸出

2019-12-01 15:44:39.097  INFO 19295 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'service-provider.properties', group: 'DEFAULT_GROUP', data: config.test=這是一個測試值

能夠看到本地服務已經獲取到Nacos配置管理中的數據了。嘗試經過接口訪問數據

➜  ~ curl -X GET '127.0.0.1:8080/config'
這是一個測試值%                                                                    
➜  ~

正確獲取到配置數據,接下來嘗試修改配置數據
file

查看控制檯日誌

2019-12-01 15:47:25.694  INFO 19295 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [config.test]

說明已經修改爲功,服務同步到最新的配置了。嘗試經過接口訪問數據

➜  ~ curl -X GET '127.0.0.1:8080/config'
這是一個測試值-修改後%                                                                    
➜  ~

配置動態更新也已經生效。項目源碼

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索