欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud + Nacos 做服务注册与配置中心

程序员文章站 2022-07-15 08:58:43
...

此前我使用的服务注册发现与配置中心均为比较老的开源产品,Eureka + disconfig,由于两者均已经停止维护,故尝试使用阿里的Nacos,Nacos的介绍就不放了,官网文档非常清晰:

================
环境版本信息
操作系统:MacOS Catalina10.15.6
JDK:1.8
Nacos-Server: 1.3.2

================

1. Server程序下载

你可以下载源码自己编译,也可以直接下载最新稳定版:https://github.com/alibaba/nacos/releases
这里为了迅速成型,我们直接下载稳定版1.3.2,解压后得到nacos文件夹,cd 到bin目录下,单机模式启动nacos server:

./startup.sh -m standalone

启动日志可以在nacos/logs/start.out看到:

tail -200f /xxxxxxx/nacos/logs/start.out

启动后,访问 http://127.0.0.1:8848/nacos/index.html#/ 即可看到Nacos的web接口,8848(珠穆朗玛峰的高度)是Nacos的web端默认端口,你也可以在nacos目录下的config中的application.properties中调整它:SpringCloud + Nacos 做服务注册与配置中心
启动以后,看到如下界面:
SpringCloud + Nacos 做服务注册与配置中心

非常清晰,左侧菜单栏我们可以进行配置管理,服务管理,账户权限控制,namespace管理,以及集群管理。

2. 编写SpringCloud客户端

创建一个SpringCloud项目

不多bb直接上pom:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.syh</groupId>
    <artifactId>mynacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mynacos</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Begin -->
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->

        <!-- Spring Cloud Begin -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!-- Spring Cloud End -->
    </dependencies>

    <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>
        </dependencies>
    </dependencyManagement>

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

</project>

如果上述依赖你有无法下载的问题,也许你需要一个阿里的MAVEN仓库配置,详情移步阿里云云效Maven

在启动类上添加一个Spring的服务发现注解@EnableDiscoveryClient:

@SpringBootApplication
@EnableDiscoveryClient
public class MynacosApplication {

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

}

下边我们编写一下配置文件:
bootstrap.yml

server:
  port: 8020
spring:
  application:
    name: service1

正常启动项目以后,我们就可以在Nacos的web端看到我们的服务了,非常简单:
SpringCloud + Nacos 做服务注册与配置中心

更多服务不再赘述。

3.配置下发

Nacos的一大优点就是它一站式的为我们集成了微服务相关的各种功能,包括配置发布,下边我们写一个controller:

@RestController
@RefreshScope
public class TestController {
    @Value("${service1.content}")
    private String content;

    @GetMapping(value = "/hello")
    public void hello() {
        System.out.println(content);
    }
}

@RefreshScope注解是Spring的,提供了自动刷新配置功能,我们做了一个简单的输出配置service1.content内容的controller。

下边我们补充一下配置文件:

bootstrap.yml

server:
  port: 8020
spring:
  application:
    name: service1
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 
      config:
        group: TEST_GROUP

注意这里我们自定义了一个group的名字为TEST_GROUP,稍后我们介绍他。

至此,你可以发现我并没有编写service1.content这个配置,如你所料,接下来我们将在server端完成配置下发:

点击左侧配置管理-配置列表 右侧加号新增配置:
SpringCloud + Nacos 做服务注册与配置中心

可以看到我们需要填写Data ID,group,这里我们详细介绍下:

Nacos抽象出了一些概念,通过Namespace、group、Data ID来定位到一个配置集,我们可以通过调整这些配置做不同环境的配置隔离:
Namespace:可以用来做物理隔离,你可以看到目前为止我们没有去配置过Namespace,Nacos默认使用public作为默认Namespace
Data ID:一个Data ID就是一个数据集,可与对应成我们项目中的一个配置文件,当然,它可以是yml,properties等任意你熟悉的配置格式。
Group:可以用来做环境隔离,区分我们的开发环境,测试环境,预发环境,生产环境等。

之前我们在配置中写了一个TEST_GROUP(也可以不配置,默认group为DEFAULT_GROUP),但没有配置DataId,Nacos默认使用服务名+.properties作为Data ID,所以我们填写:
SpringCloud + Nacos 做服务注册与配置中心

并在配置格式中选择properties,在下方的配置区填写我们的配置内容:
SpringCloud + Nacos 做服务注册与配置中心

service1.content=hello nacos config!

最后点击发布,再启动我们的客户端项目。

浏览器调用我们刚刚写的接口/hello,看到控制台可以打印出hello nacos config! 可知配置下发成功了。
SpringCloud + Nacos 做服务注册与配置中心

接下来我们重新编辑配置内容为:

service1.content=hello 

无需重启项目,再次调用/hello,看到控制台可以打印出hello ,动态更新配置成功:
SpringCloud + Nacos 做服务注册与配置中心

相关标签: 日常记录