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

摘要:
依靠Spring强大的生态环境,它已成为Java开发人员构建微服务系统的首选解决方案。本系列文章将向您介绍另一种微服务解决方案SpringCloudAlibaba。依靠阿里巴巴强大的技术支持以及Eureka2.x不再被维护的事实,我相信SpringCloudAlibaba将在不久的将来成为大多数公司实践微服务的更好选择。接下来,我们将介绍Nacos的服务注册发现和配置管理功能。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 发布!

免责声明:文章转载自《Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MYSQL常用命令集合(转载)VirtualBox CentOS7 Mini 安装增强工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用EasyExcel导出图片及异常处理

1、使用String类型导出   定义自己的Converter,不使用默认的StringImageConverter 如果图片路径为空或者图片路径是错误的,返回相应的内容 import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;...

阿里巴巴常用的 12 个后端开发工具,建议你快快收藏!

作者:爱马仕_人员链接:https://www.jianshu.com/p/4d1a4606ef61 从手动编码到自动化,从重复工作到创新,开发人员工具随着技术的发展而不断发展。阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术。通过在各种业务场景中的多年开发积累了这些技术。 本文介绍了一些阿里巴巴开发人员工具,希望它们可以帮助您的开发过...

【SpringCloud】SpringCloud Alibaba Sentinel实现熔断与限流

SpringCloud Alibaba Sentinel实现熔断与限流 限流与降级 限流 blockHandler 降级 fallback 降级需要运行时出现异常才会触发,而限流一旦触发,你连运行的机会都没有,当然就不会降级。 也就是说,两者如果同时触发,那么一定是限流触发(降级连机会都没有)。 Sentiel 官网 https://github.com/...

java alibaba fastJson 遍历数组json

import java.util.*; import com.alibaba.fastjson.*; public class Test { public static void main(String[] args) { //方法1 String json = "[{"companyId":"111111111","com...

CMMI相关知识(二)

    CMMI过程域要点简述 过程域类别 中文名字 核心内容 英文简写 等级 项目管理类           项目计划 规模及工作量估算,编制计划,计划评审与确认 PP L2 项目监督与控制 跟踪计划,问题的发现和解决 PMC L2 供应商合同管理 采购合同,外包合同管理,建立标准,选择,监控,评估、转移工作产品 SAM L2...

H3C交换机如何配置管理VLAN

1.输入”system-view“(简写”sys“),进入系统配置模式[H3C],2.下面就可以开始取消默认管理vlan了,输入“undo interface vlan-interface 1”以及“undo management-vlan" ,即可取消交换机默认管理 vlan 1 3.接下里创建VLAN,并做描述,输入”vlan 220" 以及“desc...