• Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理


    随着微服务概念的流行,越来越多的公司采用Spring Cloud全家桶构建微服务系统,实现业务的快速迭代。Spring Cloud提供了快速构建分布式微服务常用组件,包括Spring Cloud EurekaSpring Cloud RibbonSpring Cloud HystrixSpring Cloud Zuul等等。依赖Spring强大生态环境,其已经成为Java开发人员构建微服务系统首选解决方案。

    本系列文章将带大家认识另一个微服务解决方案Spring Cloud Alibaba。依托于Alibaba强大的技术支撑,以及Eureka2.x不再维护等因素,相信不久的将来Spring Cloud Alibaba将会成为大多数公司进行微服务实践的更优选择。


    下面向大家介绍Nacos的服务注册发现与配置管理功能。

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

    一、注册发现

    首先需要下载Nacos,下载完成直接解压,接下来启动Nacos

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

    上面即使用独立的方式启动Nacos,启动完成之后访问Nacos首页,默认登录账号和密码都是nacos

    登录成功之后,可以看见如下图
    file

    接下来创建一个服务注册到Nacos

    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
    

    上面的配置指定了服务注册发现地址

    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"]}%                                         
    ➜  ~ 
    

    到此已经完成的服务注册的基本使用,接下来介绍配置管理的使用

    二、配置管理

    为了方便,我直接对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 发布!

  • 相关阅读:
    记一次oracle新建用户及分配指定表权限的操作记录
    [转]word中不显示mathtype公式,只显示方框,双击后可以再mathtype里面看到公式
    C、C++成员变量对齐
    include头文件:C++标准库与C标准库
    [转]本专业部分国际会议及刊物影响因子排名
    使用Winbase.h
    [转]printf 字符串格式化
    1.6.2如何使用位逻辑运算(例如与、或、位移)来实现位向量?
    文章中图表自动编号
    取样问题 总数n事先不知道,等概率取样 (编程珠玑chapter12 课后题10)
  • 原文地址:https://www.cnblogs.com/thisismartin/p/12607686.html
Copyright © 2020-2023  润新知