Nacos 简介
Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生的应用程序
Nacos 的关键特性包括以下几项:
- 服务发现和服务健康监测:服务提供者使用原生 SDK、OpenAPI 等注册服务后,服务消费者可以使用 HTTP&API 查找和发现服务。Nacos 提供对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求
- 动态配置服务:动态配置服务可以让你以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷
- 动态 DNS 服务:动态 DNS 服务支持权重路由,让你更容易实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务
- 服务及其元数据管理:Nacos 从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及首要的 metrics 统计数据
Nacos 快速开始
1. Nacos Server 单机模式
在使用 Nacos 之前,需要先下载 Nacos 并启动 Nacos Server,Nacos Server 有两种运行模式:standalone(单机)和 cluster(集群),这里以 2.2.3.release,windows 环境为例
前往 Github 下载 Nacos Server:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
解压压缩包,在 bin 目录下执行命令 .\startup.cmd -m standalone
在浏览器中访问:http://localhost:8848/nacos,输入用户名和密码 Nacos/Nacos 便可进入 Nacos 首页
如要关闭 Nacos,在 bin 目录下执行命令 .\shutdown.cmd
0.7 版本之前的 Nacos 在单机模式时使用入式数据库实现数据的存储,不方便观察数据存储的基本情况,0.7 版本之后支持 MySQL 数据源能力,具体的操作步骤如下:
- 安装 MySQL 数据库(版本要求5.6.5+)
- 创建数据库 nacos_config,在 conf 目录下找到 mysql-schema.sql 初始化文件并进行初始化
- 修改 conf/applicationproperties 文件,增加 MySQL 数据源配置
- ### Count of DB:
- db.num=1
- ### Connect URL of DB:
- db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
- db.user.0=root
- db.password.0=123
复制代码 - 之后 Nacos 所有的数据都会保存到 MySQL
2. Nacos Server 集群模式
Nacos 单机模式仅仅适用于测试和单机适用,生产环境大多适用集群模式以确保高可用
接下来讲解如何搭建 Nacso 集群环境,具体步骤如下:
- 将下载的 Nacos 安装包复制两份,分别命名为 Nacos-01,Nacos-02、Nacos-03,注意,集群模式必须使用配置数据库(如 MySQL)
- 修改 Nacos-02、Nacos-03 的配置文件 conf/applicationproperties,将服务启动端口分别改为 8850 和 8852
- #*************** Config Module Related Configurations ***************#
- ### If use MySQL as datasource:
- ### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
- spring.datasource.platform=mysql
- spring.sql.init.platform=mysql
- #*************** Spring Boot Related Configurations ***************#
- ### Default web context path:
- server.servlet.contextPath=/nacos
- ### Include message field
- server.error.include-message=ALWAYS
- ### Default web server port:
- server.port=8850
复制代码 注意:nacos 在 2.0 版本以后,除对外的端口外,还占用另外三个端口:
- raft port: ${server.port} - 1000
- grpc port: ${server.port} + 1000
- grpc port for server: ${server.port} + 1001
假设对外端口为 8848,即总共会有4个端口被占用,分别为 7848、8848、9848、9849,因此,在同一台机启动多个 nacos 节点时要注意避开所有占用的端口
- 在 Nacos-01、Nacos-02、Nacos-03 的 conf 目录下添加 cluster.conf 集群配置文件
- ### 这里简单将3个nacos实例部署在同一个机器下
- #
- 127.0.0.1:8848
- 127.0.0.1:8850
- 127.0.0.1:8852
复制代码 - 分别进入 Nacos-01、Nacos-02、Nacos-03 的 bin 目录执行命令 .\startup.cmd,没有参数默认就是集群模式
3. Nacos+Nginx 集群模式
在 Nginx 核心配置文件 nginx.conf 添加如下配置- server {
- listen 8847;
- server_name localhost;
- location /nacos {
- proxy pass http://nacos-server/nacos;
- }
- upstream nacos-server {
- server 127.0.0.1:8848;
- server 127.0.0.1:8850;
- server 127.0.0.1:8852;
- }
- }
复制代码 启动 Nginx,访问:http://localhost:8847/nacos,至此我们完成 Nacos+Nginx 的搭建
SpringBoot 注册到 Nacos
1. Nacos 配置管理
以 SpringBoot 2.3.12.RELEASE 为例,在项目的 pom.xml 文件添加如下依赖:- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>nacos-config-spring-boot-starter</artifactId>
- <version>0.2.12</version>
- </dependency>
复制代码 在 application.properties 中配置 Nacos Server 的地址- # 如果搭建了集群只需要填其中一个节点的ip:port即可
- nacos.config.server-addr=127.0.0.1:8848
- # 如果配置了Nginx,则输入配置的地址,如上面我配置的
- # nacos.config.server-addr=127.0.0.1:8847/nacos
复制代码 在启动类中使用 @NacosPropertySource 加载 dataId 为 springboot-nacos-config 的配置源,并开启自动更新- @SpringBootApplication
- @NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
- public class SpringbootNacosApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringbootNacosApplication.class, args);
- }
- }
复制代码 当然,我们需要在 Nacos 的配置列表中添加 Data-Id: springboot-nacos-config 的配置文件通过 Nacos 的 @NacosValue 注解设置属性值- @RestController("config")
- public class ConfigCon {
- @NacosValue(value = "${test.name}", autoRefreshed = true)
- private String name;
- @GetMapping("get")
- public String get() {
- return name;
- }
- }
复制代码 2. Nacos 服务注册
在项目的 pom.xml 文件添加如下依赖:- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>nacos-discovery-spring-boot-starter</artifactId>
- <version>0.2.12</version>
- </dependency>
复制代码 在 application.properties 中配置 Nacos Server 的地址- spring.application.name=springboot-nacos
- server.port=8080
- server.address=127.0.0.1
- # 如果搭建了集群只需要填其中一个节点的ip:port即可
- nacos.discovery.server-addr=127.0.0.1:8848
- # 如果配置了Nginx,则输入配置的地址,如上面我配置的
- nacos.discovery.server-addr=127.0.0.1:8847/nacos
复制代码 修改启动类,运行即可- @SpringBootApplication
- @NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
- public class SpringbootNacosApplication implements CommandLineRunner {
- // 使用@NacosInjected注入Nacos的NamingService实例
- // NamingService是Nacos对外提供给使用者的接口
- @NacosInjected
- private NamingService namingService;
- @Value("${spring.application.name}")
- private String applicationName;
- @Value("${server.port}")
- private Integer serverPort;
- @Value("${server.address}")
- private String serverAddress;
- public static void main(String[] args) {
- SpringApplication.run(SpringbootNacosApplication.class, args);
- }
- @Override
- public void run(String... args) throws Exception {
- //应用启动时,将服务注册到Nacos
- namingService.registerInstance(applicationName, serverAddress, serverPort);
- }
- }
复制代码 Nacos SpringCloud
本节主要讲解 SpringCloud 的如何通过 Nacos 实现配置管理和服务发现,以 SpringBoot 2.3.12.RELEASE 为例
1. Nacos 配置管理
在项目的 pom.xml 文件添加如下依赖:- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.2.10-RC1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
复制代码 在 application.properties 中配置 Nacos Server 的地址- server.port=8080
- spring.application.name=springcloud-nacos
- spring.cloud.nacos.config.server-addr=127.0.0.1:8848
- # spring.cloud.nacos.config.server-addr=127.0.0.1:8847/nacos
复制代码 spring.application.name 之后会构成 Nacos 配置管理 datald 字段的一部分,在 Nacos Spring Cloud中,datald 的完整格式如下:${prefix}-${spring.profile.active}.${file-extension}
- ${prefix}:默认为 spring.application.name 的值,也可以通过 spring.cloud.Nacos.config.prefix 配置项来配置
- ${spring.profile.active}:当前环境对应的 profile,当 spring.profile.active 为空时,对应的连接符 - 也将不存在,datald 的拼接格式变成 ${prefix}.${file-extension}
- ${file-extension}:配置内容的数据格式,可以通过 `spring.cloud.Nacos.config.file-extension· 来配置 properties 或 yaml 类型
在 Nacos 配置列表中创建 springcloud-nacos.properties 配置文件开发 Controller 获取配置- @RefreshScope
- @RestController("config")
- public class ConfigCon {
- @Value("${test.name}")
- private String name;
- @GetMapping("get")
- public String get() {
- return name;
- }
- }
复制代码 2. Nacos 服务注册
在项目的 pom.xml 文件添加如下依赖:- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.2.10-RC1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
复制代码 在 application.properties 中配置 Nacos Server 的地址- server.port=8080
- spring.application.name=springcloud-nacos
- spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos
复制代码 在启动类上添加 @EnableDiscoveryClient 注解开启服务注册发现功能- @EnableDiscoveryClient
- @SpringBootApplication
- public class SpringcloudNacosApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringcloudNacosApplication.class, args);
- }
- }
复制代码 在 Nacos 管理页面查看服务列表,发现服务已经注册到 Nacos,服务提供端和消费端都用这种方式进行注册,之后消费端可直接通过服务名直接调用提供端的接口
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |