Nacos 从入门到精通-手把手教会你
Nacos 使用教程
Nacos 是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,旨在帮助您更容易地构建、交付和管理微服务平台。它集成了服务注册与发现、动态配置管理、动态 DNS 服务和服务及元数据管理等功能。
1. Nacos 简介
Nacos(Dynamic Naming and Configuration Service)是一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台。它提供了以下主要功能:
- 服务发现与服务健康检查:使服务更容易注册,并通过 DNS 或 HTTP 接口发现其他服务,提供实时健康检查,防止向不健康的主机或服务实例发送请求。
- 动态配置管理:允许您在所有环境中以集中和动态的方式管理所有服务的配置,消除在更新配置时重新部署应用程序的需求,使配置更改更加高效和灵活。
- 动态 DNS 服务:提供基于 DNS 协议的服务发现能力,支持异构语言的服务发现,方便三方应用查阅和发现。
- 服务和元数据管理:从微服务平台建设的视角管理数据中心的所有服务及元数据,包括服务描述、生命周期、静态依赖分析、健康状态、流量管理、路由和安全策略。
2. Nacos 部署
2.1 下载并启动 Nacos
下载 Nacos:从 Nacos 的 GitHub Releases 页面下载最新版本的 Nacos。
解压安装包:将下载的压缩包解压到指定目录。
启动 Nacos:进入解压后的
bin
目录,执行以下命令启动 Nacos:Windows 系统:
startup.cmd -m standalone
Linux/Mac 系统:
sh startup.sh -m standalone
访问 Nacos 控制台:启动成功后,打开浏览器,访问
http://localhost:8848/nacos
,默认用户名和密码均为nacos
。
2.2 配置 Nacos
修改端口号:如果默认端口
8848
被占用,可以修改conf/application.properties
文件中的server.port
配置项。配置数据库:默认情况下,Nacos 使用嵌入式数据库 Derby。
- 切换到 MySQL:
- 在 MySQL 中创建数据库
nacos_config
。 - 执行
conf/nacos-mysql.sql
脚本,初始化数据库结构。 - 修改
conf/application.properties
文件,配置数据库连接信息:spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?useUnicode=true&characterEncoding=utf-8&useSSL=false
db.user=root
db.password=
- 在 MySQL 中创建数据库
- 切换到 MySQL:
启用鉴权功能:
修改
conf/application.properties
文件,设置以下配置:nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=your_identity_key
nacos.core.auth.server.identity.value=your_identity_value
nacos.core.auth.plugin.nacos.token.secret.key=your_secret_key
重启 Nacos 服务以使配置生效。
3. Nacos 作为服务注册中心
3.1 引入依赖
在 Spring Boot 项目的 pom.xml
中添加 Nacos 服务发现的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.2 配置 Nacos
在 application.properties
或 application.yml
中添加以下配置:
spring.application.name=your-service-name
spring.cloud.nacos.discovery.server-addr=localhost:8848
3.3 启用服务发现
在主启动类上添加 @EnableDiscoveryClient
注解:
@SpringBootApplication
@EnableDiscoveryClient
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
3.4 服务提供者
创建一个 REST 控制器,提供服务接口:
@RestController
@RequestMapping("/service")
public class YourServiceController {
@GetMapping("/hello")
public String sayHello() {
return "Hello from Nacos Service!";
}
}
3.5 服务消费者
在服务消费者项目中,添加 Nacos 服务发现的依赖,并配置 Nacos 地址:
spring.application.name=your-consumer-service
spring.cloud.nacos.discovery.server-addr=localhost:8848
使用 @LoadBalanced
注解的 RestTemplate
进行服务调用:
@Configuration
public class AppConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
在控制器中调用服务:
@RestController
@RequestMapping("/consumer")
public class YourConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/hello")
public String sayHello() {
return restTemplate.getForObject("http://your-service-name/service/hello", String.class);
}
}
4. Nacos 作为配置中心
4.1 引入依赖
在 pom.xml
中添加 Nacos 配置的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4.2 配置 Nacos
在 bootstrap.properties
或 bootstrap.yml
中添加以下配置:
spring.application.name=your-application-name
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=properties
4.3 创建配置文件
在 Nacos 控制台中,创建一个配置文件:
- Data ID:
your-application-name.properties
- Group:
DEFAULT_GROUP
- Content:
your.config
4.4 配置动态刷新
实现配置的动态刷新,需要在需要动态刷新的类上添加 @RefreshScope
注解。 Nacos 中的配置发生变化时,标注了该注解的类会自动刷新其配置。
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${your.config.key}")
private String configValue;
@GetMapping("/value")
public String getConfigValue() {
return configValue;
}
}
上述示例中,ConfigController
类上的 @RefreshScope
注解确保了当 Nacos 中的配置发生变化时,configValue
会自动更新。
4.5 配置共享与环境隔离
acos 支持通过命名空间(Namespace)和分组(Group)来实现配置的共享和环境隔离。名空间用于区分不同的环境,如开发、测试和生产环境;分组用于将配置划分到不同的业务模块。
- 命名空间(Namespace):于环境隔离,例如开发环境、测试环境和生产环境。
- 分组(Group):于业务隔离,将不同业务模块的配置划分到不同的组。
Nacos 控制台中,您可以创建不同的命名空间和分组,并在配置管理中指定相应的命名空间和分组,以实现配置的共享和环境隔离。
4.6 配置加密与解密
acos 支持对敏感配置项进行加密存储和解密读取。可以在 Nacos 控制台中对配置项进行加密,客户端在读取时会自动解密。
启用配置加密功能,需要在 Nacos 的配置文件中设置加密密钥。体配置方法请参考 Nacos 官方文档。
5. Nacos 集群部署
生产环境中,建议将 Nacos 部署为集群,以提高系统的高可用性和扩展性。acos 支持多种集群部署方式,包括:
- 单机模式:用于开发和测试环境。
- 集群模式:用于生产环境,提供高可用性和负载均衡。
集群模式下,您需要配置多个 Nacos 实例,并通过负载均衡器进行流量分发。体的集群部署步骤和配置方法,请参考 Nacos 官方文档。
6. Nacos 与 Spring Cloud 集成
acos 可以与 Spring Cloud 进行深度集成,作为服务注册与发现和配置中心。过引入相应的依赖和配置,您可以在 Spring Cloud 项目中使用 Nacos 的服务发现和配置管理功能。
体的集成步骤和配置方法,请参考 Nacos 官方文档。
7. Nacos 与 Spring Boot 集成
acos 也可以与 Spring Boot 进行集成,作为服务注册与发现和配置中心。过引入相应的依赖和配置,您可以在 Spring Boot 项目中使用 Nacos 的服务发现和配置管理功能。
体的集成步骤和配置方法,请参考 Nacos 官方文档。
8. Nacos 与 Dubbo 集成
acos 可以与 Dubbo 进行集成,作为服务注册与发现中心。过引入相应的依赖和配置,您可以在 Dubbo 项目中使用 Nacos 的服务发现功能。
体的集成步骤和配置方法,请参考 Nacos 官方文档。
9. Nacos 与 Kubernetes 集成
acos 可以与 Kubernetes 进行集成,作为服务注册与发现中心。过配置 Nacos 与 Kubernetes 的集成,您可以在 Kubernetes 环境中使用 Nacos 的服务发现功能。
体的集成步骤和配置方法,请参考 Nacos 官方文档。
10. Nacos 的监控与告警
acos 提供了丰富的监控和告警功能,您可以通过 Nacos 控制台查看服务的健康状态、配置的变更历史等信息。时,Nacos 也支持与 Prometheus 等监控系统集成,实现对 Nacos 服务的监控。
体的监控和告警配置方法,请参考 Nacos 官方文档。
11. Nacos 的安全性
acos 提供了多种安全机制,包括鉴权、加密等,确保您的服务和配置的安全性。可以在 Nacos 控制台中配置鉴权策略,控制对服务和配置的访问权限。
体的安全配置方法,请参考 Nacos 官方文档。
12. Nacos 的扩展性
acos 提供了丰富的扩展点,您可以根据业务需求进行二次开发和扩展。例如,您可以通过 Nacos 的插件机制,开发自定义的服务发现和配置管理功能。
体的扩展方法,请参考 Nacos 官方文档。
13. Nacos 的社区与支持
acos 拥有活跃的社区,您可以在社区中获取最新的技术动态、参与讨论和贡献代码。时,Nacos 也提供了丰富的文档和教程,帮助您更好地使用 Nacos。
多信息,请访问 Nacos 官方网站。
14. 总结
Nacos 是一个功能强大的服务发现和配置管理平台,集成了服务注册与发现、动态配置管理、动态 DNS 服务和服务及元数据管理等功能。通过本教程,您可以了解如何部署 Nacos、使用其作为服务注册中心和配置中心,以及与 Spring Cloud 的集成。希望本教程能帮助您更好地理解和使用 Nacos,提升微服务架构的效率和可靠性。
Nacos 从入门到精通-手把手教会你的更多相关文章
- 学习笔记之C++入门到精通(名师教学·手把手教会)【职坐标】_腾讯课堂
C++入门到精通(名师教学·手把手教会)[职坐标]_腾讯课堂 https://ke.qq.com/course/101465#term_id=100105503 https://github.com/ ...
- Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
Android开发书籍推荐:从入门到精通系列学习路线书籍介绍 很多时候我们都会不断收到新手的提问"Android开发的经典入门教材和学习路线?"."Android 开发入 ...
- 《uniGUI for cBuilder入门到精通》新书预定
<uniGUI for cBuilder入门到精通>火热预定中,从零开始带你入瓮带你飞,手把手教你如何快速安装,开发和部署一个web系统,前十名用户售价暂定100元,后续价格每本200元, ...
- (转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
Android开发书籍推荐:从入门到精通系列学习路线书籍介绍 转自:http://blog.csdn.net/findsafety/article/details/52317506 很多时候我们都会不 ...
- ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)
@ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
随机推荐
- vue标签页tabs和codemirror一起使用
vue标签页tabs和codemirror一起使用时, codemirror 会变形 要注意tab切换时,codemirror必须刷新配置 <el-tabs v-model="conf ...
- (Python基础教程之十九)Python优先级队列示例
1.什么是优先队列 优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但每个元素还具有与之关联的"优先级". 在优先级队列中,优先级高的元素先于优先级低的元素提供. 如果 ...
- Mac之终端工具iterm2
1. 安装 iTerm2 下载地址:https://www.iterm2.com/downloads.html 下载的是压缩文件,解压后是执行程序文件,你可以直接双击,或者直接将它拖到 Applica ...
- Lambda【1】-- List相关Lambda表达式使用(上篇)
Lambda在jdk1.8里面已经很好用了,在这里不讲底层的实现,只有简单的用法,会继续补全. 首先一个list我们要使用lambda的话,需要使用它的stream()方法,获取流,才能使用后续的方法 ...
- OSG开发笔记(三十五): OsgUtil::Optimizer:优化场景策略,提升显示性能和渲染效率
前言 在OSG中,osgUtil::Optimizer是一个非常重要的工具类,它提供了一系列优化场景图的方法,以提高渲染性能和效率. Demo 在笔者的pc上,优化前优化后渲染交互没 ...
- javascript 实现参数重载
1.概要 在java中,同一个函数签名,比如 getUser,我们可以根据参数的不同,调用不同功能的方法.这也就是参数重载,如何在javascript也实现参数重载呢? 2.实现方法 function ...
- 【CLS数据淘金第四期】网络流日志-云联网日志分析
导语 云联网(Cloud Connect Network,CCN)云联网覆盖全球 20+ 地域,提供云上私有网络间(VPC).VPC 与本地数据中心间(IDC)内网互联的服务,具备全网多点互联.路由自 ...
- k8s备份恢复实践--velero
k8s备份恢复实践--velero 使用Velero备份k8资源到minio,阿里云oss,七牛云Kodo 环境linux + kubectl #1.velero简介 Velero是用于Kuberne ...
- k8s calico-node错误日志 listen tcp: lookup localhost on 8.8.4.4:53: no such host
项目场景:K8s搭建 问题描述:查看pods状态,发现 calico-node异常[root@k8s-master ~]# kubectl get pods --all-namespacesNAMES ...
- Python爬虫requests判断请求超时并重新post/get发送请求
Python爬虫requests判断请求超时并重新post/get发送请求在使用Python爬虫中,你可以使用requests库来发送网络请求.为了判断请求超时并重新发送请求,你可以设置一个超时时间, ...