ToB企服应用市场:ToB评测及商务社交产业平台

标题: 注册中心/配置管理 —— SpringCloud Alibaba Nacos [打印本页]

作者: 怀念夏天    时间: 2023-8-7 23:38
标题: 注册中心/配置管理 —— SpringCloud Alibaba Nacos
Nacos 简介

Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生的应用程序
Nacos 的关键特性包括以下几项:

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 数据源能力,具体的操作步骤如下:
2. Nacos Server 集群模式

Nacos 单机模式仅仅适用于测试和单机适用,生产环境大多适用集群模式以确保高可用
接下来讲解如何搭建 Nacso 集群环境,具体步骤如下:
3. Nacos+Nginx 集群模式

在 Nginx 核心配置文件 nginx.conf 添加如下配置
  1. server {
  2.         listen       8847;
  3.         server_name  localhost;
  4.         location /nacos {
  5.                 proxy pass http://nacos-server/nacos;
  6.         }
  7.         upstream nacos-server {
  8.                 server 127.0.0.1:8848;
  9.                 server 127.0.0.1:8850;
  10.                 server 127.0.0.1:8852;
  11.         }
  12. }
复制代码
启动 Nginx,访问:http://localhost:8847/nacos,至此我们完成 Nacos+Nginx 的搭建

SpringBoot 注册到 Nacos

1. Nacos 配置管理

以 SpringBoot 2.3.12.RELEASE 为例,在项目的 pom.xml 文件添加如下依赖:
  1. <dependency>
  2.     <groupId>com.alibaba.boot</groupId>
  3.     <artifactId>nacos-config-spring-boot-starter</artifactId>
  4.     <version>0.2.12</version>
  5. </dependency>
复制代码
在 application.properties 中配置 Nacos Server 的地址
  1. # 如果搭建了集群只需要填其中一个节点的ip:port即可
  2. nacos.config.server-addr=127.0.0.1:8848
  3. # 如果配置了Nginx,则输入配置的地址,如上面我配置的
  4. # nacos.config.server-addr=127.0.0.1:8847/nacos
复制代码
在启动类中使用 @NacosPropertySource 加载 dataId 为 springboot-nacos-config 的配置源,并开启自动更新
  1. @SpringBootApplication
  2. @NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
  3. public class SpringbootNacosApplication {
  4.     public static void main(String[] args) {
  5.         SpringApplication.run(SpringbootNacosApplication.class, args);
  6.     }
  7. }
复制代码
当然,我们需要在 Nacos 的配置列表中添加 Data-Id: springboot-nacos-config 的配置文件
  1. test.name=hahaha
复制代码
通过 Nacos 的 @NacosValue 注解设置属性值
  1. @RestController("config")
  2. public class ConfigCon {
  3.     @NacosValue(value = "${test.name}", autoRefreshed = true)
  4.     private String name;
  5.     @GetMapping("get")
  6.     public String get() {
  7.         return name;
  8.     }
  9. }
复制代码
2. Nacos 服务注册

在项目的 pom.xml 文件添加如下依赖:
  1. <dependency>
  2.     <groupId>com.alibaba.boot</groupId>
  3.     <artifactId>nacos-discovery-spring-boot-starter</artifactId>
  4.     <version>0.2.12</version>
  5. </dependency>
复制代码
在 application.properties 中配置 Nacos Server 的地址
  1. spring.application.name=springboot-nacos
  2. server.port=8080
  3. server.address=127.0.0.1
  4. # 如果搭建了集群只需要填其中一个节点的ip:port即可
  5. nacos.discovery.server-addr=127.0.0.1:8848
  6. # 如果配置了Nginx,则输入配置的地址,如上面我配置的
  7. nacos.discovery.server-addr=127.0.0.1:8847/nacos
复制代码
修改启动类,运行即可
  1. @SpringBootApplication
  2. @NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
  3. public class SpringbootNacosApplication implements CommandLineRunner {
  4.     // 使用@NacosInjected注入Nacos的NamingService实例
  5.     // NamingService是Nacos对外提供给使用者的接口
  6.     @NacosInjected
  7.     private NamingService namingService;
  8.     @Value("${spring.application.name}")
  9.     private String applicationName;
  10.     @Value("${server.port}")
  11.     private Integer serverPort;
  12.     @Value("${server.address}")
  13.     private String serverAddress;
  14.     public static void main(String[] args) {
  15.         SpringApplication.run(SpringbootNacosApplication.class, args);
  16.     }
  17.     @Override
  18.     public void run(String... args) throws Exception {
  19.         //应用启动时,将服务注册到Nacos
  20.         namingService.registerInstance(applicationName, serverAddress, serverPort);
  21.     }
  22. }
复制代码
Nacos SpringCloud

本节主要讲解 SpringCloud 的如何通过 Nacos 实现配置管理和服务发现,以 SpringBoot 2.3.12.RELEASE 为例
1. Nacos 配置管理

在项目的 pom.xml 文件添加如下依赖:
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.alibaba.cloud</groupId>
  4.         <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5.     </dependency>
  6. </dependencies>
  7. <dependencyManagement>
  8.     <dependencies>
  9.         <dependency>
  10.             <groupId>com.alibaba.cloud</groupId>
  11.             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  12.             <version>2.2.10-RC1</version>
  13.             <type>pom</type>
  14.             <scope>import</scope>
  15.         </dependency>
  16.     </dependencies>
  17. </dependencyManagement>
复制代码
在 application.properties 中配置 Nacos Server 的地址
  1. server.port=8080
  2. spring.application.name=springcloud-nacos
  3. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  4. # 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}
在 Nacos 配置列表中创建 springcloud-nacos.properties 配置文件
  1. test.name=hahah
复制代码
开发 Controller 获取配置
  1. @RefreshScope
  2. @RestController("config")
  3. public class ConfigCon {
  4.     @Value("${test.name}")
  5.     private String name;
  6.     @GetMapping("get")
  7.     public String get() {
  8.         return name;
  9.     }
  10. }
复制代码
2. Nacos 服务注册

在项目的 pom.xml 文件添加如下依赖:
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.alibaba.cloud</groupId>
  4.         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5.     </dependency>
  6. </dependencies>
  7. <dependencyManagement>
  8.     <dependencies>
  9.         <dependency>
  10.             <groupId>com.alibaba.cloud</groupId>
  11.             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  12.             <version>2.2.10-RC1</version>
  13.             <type>pom</type>
  14.             <scope>import</scope>
  15.         </dependency>
  16.     </dependencies>
  17. </dependencyManagement>
复制代码
在 application.properties 中配置 Nacos Server 的地址
  1. server.port=8080
  2. spring.application.name=springcloud-nacos
  3. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos
复制代码
在启动类上添加 @EnableDiscoveryClient 注解开启服务注册发现功能
  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. public class SpringcloudNacosApplication {
  4.     public static void main(String[] args) {
  5.         SpringApplication.run(SpringcloudNacosApplication.class, args);
  6.     }
  7. }
复制代码
在 Nacos 管理页面查看服务列表,发现服务已经注册到 Nacos,服务提供端和消费端都用这种方式进行注册,之后消费端可直接通过服务名直接调用提供端的接口


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4