SpringCloud + Nacos 做服务注册与配置中心
此前我使用的服务注册发现与配置中心均为比较老的开源产品,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中调整它:
启动以后,看到如下界面:
非常清晰,左侧菜单栏我们可以进行配置管理,服务管理,账户权限控制,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端看到我们的服务了,非常简单:
更多服务不再赘述。
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端完成配置下发:
点击左侧配置管理-配置列表 右侧加号新增配置:
可以看到我们需要填写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,所以我们填写:
并在配置格式中选择properties,在下方的配置区填写我们的配置内容:
service1.content=hello nacos config!
最后点击发布,再启动我们的客户端项目。
浏览器调用我们刚刚写的接口/hello,看到控制台可以打印出hello nacos config! 可知配置下发成功了。
接下来我们重新编辑配置内容为:
service1.content=hello
无需重启项目,再次调用/hello,看到控制台可以打印出hello ,动态更新配置成功:
上一篇: nacos作为配置中心
下一篇: JMS之ActiveMQ(二):简单学习
推荐阅读
-
SpringCloud第二代实战系列:一文搞定Nacos实现服务注册与发现
-
SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
-
springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版
-
springCloud使用Nacos作为服务发现与注册中心,配置中心
-
SpringCloud + Nacos 做服务注册与配置中心
-
Nacos作为服务注册中心&配置中心实战
-
Nacos作为微服务注册中心和配置中心详解
-
Nacos 作为服务注册中心和配置中心 简单Demo
-
Nacos作为微服务架构的注册发现中心和配置中心
-
SpringCloud入门(二十七) ------ spring cloud Alibaba Nacos实现服务注册与发现