当前位置:网站首页>什么是Nacos及实战使用教程
什么是Nacos及实战使用教程
2022-07-19 21:42:00 【向着百万年薪努力的小赵】
1Nacos是什么
注册中心加配置中心的集合体,Nacos提供了统一配置管理、服务发现与注册。 其中服务注册和发现的功能,相当于dubbo里面使用到的zookeeper、 或者spring cloud里面应用到的consoul以及eureka。
2 Nacos的特性
2.1 服务发现和服务健康监测
Nacos提供了基于RPC的服务发现,服务提供者可以将自身的服务通过原生API或者openApi来实现服务的注册,服务消费者可以使用API或者Http来查找和发现服务.
同时,Nacos提供了对服务的实时监控检查,当发现服务不可用时,可以实现对服务的动态下线从而阻止服务消费者向不健康的服务发送请求。
2.2 配置管理
传统的配置管理,是基于项目中的配置文件来实现,当出现配置文件变更时需要重新部署,而动态配置中心可以将配置进行统一的管理,是的配置变得更加灵活以及高效。
动态配置中心可以实现路由规则的动态配置、限流规则的动态配置、动态数据源、开关、动态UI等场景.
国内比较有名的开源配置中心: Aollo / diamond / disconf
2Nacos的基本应用
首先,我们需要先启动Nacos服务,启动服务有两种方式,一种是直接下载已经编译好的包直接运行。另一种是通过源码来构建。
我们基于源码先来构建,因为目前版本发布比较频繁,所以我们看的时候,它的内容也一直在变化。
基本上我们只需要简单了解它的应用就行
2.1 从github上下载源码
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos clean install -U
ls -al distribution/target/
cd distribution/target/nacos-server-$version/nacos/bin
2.2 启动服务
linux系统下:
sh startup.sh -m standalone
window系统:
cmd startup.cmd
2.3 docker下启动
Nacos也可以直接通过docker安装。
docker run -d --name nacos-server-8848 -p 8848:8848 --privileged=true -v /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v
/opt/nacos/logs:/home/nacos/logs --restart=always -e MODE=standalone -e
PREFER_HOST_MODE=hostname nacos/nacos-server
2.4 访问nacos
http://localhost:8848/nacos
默认的帐号密码是:nacos/nacos
3 Nacos注册中心实战
接下来,我们通过一个案例来演示一下spring cloud alibaba下使用nacos实现配置中心以及服务注册的功能。
3.1 创建一个项目
创建一个spring-cloud-dubbo-example的maven工程
分别添加三个模块
- spring-cloud-dubbo-sample-api
- spring-cloud-dubbo-sample-provider
- spring-cloud-dubbo-sample-consumer
其中后面两个模块都是spring boot的应用。
修改 spring-cloud-dubbo-sample-provider
这个模块:
将dependencyManagement部分的依赖移动到parent pom.xml
spring boot采用2.2.x/ spring cloud alibaba采用2.2.1
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${
spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${
spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
修改spring-cloud-dubbo-sample-provider中的pom.xml,增加parent模块的依赖:
<parent>
<groupId>com.gupaoedu.dubbo</groupId>
<artifactId>spring-cloud-dubbo-example</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
添加maven依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.2 定义服务接口
在spring-boot-dubbo-sample-api模块中,定义接口
public interface IHelloService {
String sayHello();
}
3.3 实现服务
在spring-boot-dubbo-sample-provider中,实现IHelloService接口
public class HelloServiceImpl implements IHelloService{
@Override
public String sayHello() {
return "Hello GuPao";
}
}
添加 @EnableDiscoveryClient 注解
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudDubboSampleProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleProviderApplication.class,args);
}
}
3.4 配置dubbo服务发布
在服务实现类中添加 @Service 注解
@Service
public class HelloServiceImpl implements IHelloService{
@Override
public String sayHello() {
return "Hello GuPao";
}
}
配置dubbo提供方信息
# dubbo 服务扫描基础包路径
dubbo.scan.base-packages=com.gupaoedu.dubbo.springclouddubbosampleprovider
dubbo.protocol.id=dubbo
# Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端 口,从 20880 开始)
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
spring.cloud.nacos.discovery.server-addr=192.168.216.128:8848
dubbo.scan.base-packages :
指定 Dubbo 服务实现类的扫描基准包dubbo.protocol :
Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称, port 为协议端口( -1 表示自增端口,从 20880 开始)dubbo.registry :
Dubbo 服务注册中心配置,其中子属性 address 的值 “springcloud://localhost”,说明挂载到 Spring Cloud 注册中心spring.cloud.nacos.discovery :
Nacos 服务发现与注册配置,其中子属性 server-addr指定 Nacos 服务器主机和端口
3.5 版本规范
项目的版本号格式为 x.x.x 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用 0,即版本号为 0.x.x 的格式。
由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloudcommons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:
- 1.5.x 版本适用于 Spring Boot 1.5.x
- 2.0.x 版本适用于 Spring Boot 2.0.x
- 2.1.x 版本适用于 Spring Boot 2.1.x
- 2.2.x 版本适用于 Spring Boot 2.2.x
3.6 构建服务消费者
添加jar包依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加配置文件:
spring.application.name=spring-cloud-dubbo-sample-consumer
dubbo.application.name=spring-cloud-dubbo-sample-consumer
dubbo.cloud.subscribed-services=spring-cloud-dubbo-sample-provider
spring.cloud.nacos.discovery.server-addr=192.168.216.128:8848
除应用名称 spring.application.name
存在差异外, spring-cloud-dubbo-client-sample
新增了属性 dubbo.cloud.subscribed-services
的设置。并且该值为服务提供方应用 “spring- cloud-dubbo-sample-provider”。
它的主要作用是服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 “,
” 分割。不推荐使用默认值为 “*
”,它将订阅所有应用。
编写测试代码
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudDubboSampleConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleConsumerApplication.class, args);
}
@Reference
IHelloService helloService;
@GetMapping("/say")
public String say(){
return helloService.sayHello();
}
}
4 Nacos配置中心实战
在Nacos中,实现动态配置管理,相对于Spring Cloud中的Config来说,友好太多了,先给大家简单演示一下
4.1 添加jar包依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
4.2 bootstrap.properties
需要注意,配置中心的ip,需要放在bootstrap.properties文件中,因为需要保证优先级。
spring.cloud.nacos.config.server-addr=192.168.216.128:8848
4.3 NacosConfigController
创建一个controller,用来测试从nacos配置中心获取数据的场景
dataId 可以认为是一个配置集,一个系统可以有多个配置集,一般我们可以使用包名来命名,从而很好的达到数据分类的目的。
groupId 配置分组,这个和dataId类似,但是它的纬度更高一些,可能是基于项目层面进行划分。
autoRefreshed 自动更新配置。
@RefreshScope
@RestController
public class NacosController {
@Value("${info:hello Nacos}")
private String info;
@GetMapping("/get")
public String get(){
return info;
}
}
4.4 测试过程
启动服务,访问
http://localhost:8080/get
,浏览器会显示info的默认值,因为这个时候nacos还没有配置info的key进入控制台,增加配置,dataid=example,groupid=spring-cloud-dubbo-sample-provider, 并且增加 info = xx的value属性
再次刷新url,就可以读取到值的变化
5 Spring Boot集成Nacos
通过上面两个案例,我们了解了Nacos作为服务注册中心以及配置中心的基本使用。
从使用过程中不难发现,它的整体部署和使用比Spring Cloud Netflix的Config以及Eureka要方便很多。
另外,Nacos它是一个独立组件,不一定要集成到Spring Cloud中。有些公司没有采用springcloud alibaba,而是直接把nacos作为一个独立组件使用也是可以的,再给大家演示一个Spring Boot集成Nacos实现动态配置和服务注册,虽然本质上是一样,但是在配置上会有一些细微的差异。
5.1 Spring Boot集成Nacos实现动态配置
创建spring boot应用
添加nacos配置中心的依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
创建一个controller作为测试
@RestController
@NacosPropertySource(dataId = "spring-cloud-dubbo-sample- provider",autoRefreshed = true)
public class TestController {
@NacosValue(value = "${info:defailt value}",autoRefreshed = true)
private String info;
@GetMapping("/get") public String get(){
return info;
}
}
修改application.properties文件
nacos.config.server-addr=192.168.216.128:8848
5.2 Spring Boot集成Nacos实现注册中心
添加jar包依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
创建一个测试类,用户返回当前nacos服务器上注册的服务列表:
@RestController
public class ServiceController {
@NacosInjected
private NamingService namingService;
@GetMapping("/discovery")
public List<Instance> get(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
@PostMapping("/registry")
public void registry() throws NacosException {
namingService.registerInstance("example","192.168.1.1",8888,"Test");
}
}
修改application.properties文件:
nacos.discovery.server-addr=192.168.216.128:8848
- 先调用registry这个接口,向nacos注册服务
- 再访问 http://localhost:8080/discovery?serviceName=example 获取指定服务的实例信息
- 也可以通过直接调用nacos server的服务注册接口进行服务注册
- http://127.0.0.1:8848/nacos/v1/ns/instance? serviceName=example&ip=127.0.0.1&port=8080
6 Nacos的整体架构
Nacos的整体架构还是比较清晰的,看下面这个官方提供的架构图就可以了。
边栏推荐
猜你喜欢
Jenkins持续集成入门到精通
从wolai转移到Notion
CPDA|先学数据分析工具还是数据分析思维?
mysql建库建表(一)
阻力很大的舵机电流特性
TikTok直播带货助力产业出海,FastData观察行业精品沙龙助力生态发展
[C debugging] - debug C code using vs 2012 ide environment
Google Earth Engine——如何通过函数返回值获取字符串中想获取的信息
Improve the mirror station configuration information - mirror station experience Officer
常见面试题知识点之:分布式锁
随机推荐
【论文阅读|浅读】RolX: Structural Role Extraction & Mining in Large Graphs
Improve the mirror station configuration information - mirror station experience Officer
Matrikon OPC 模拟器使用教程
1054 The Dominant Color
XML to VOC, VOC to coco, coco to Yolo, coco partition, coco check, Yolo check, coco visualization
2022年下半年(软考高级)信息系统项目管理师认证招生简章
如何做好测试用例的设计 软件测试零基础必看
[C # process control] - if/switch selection structure in C #
[paper reading | shallow reading] rolx: structural role Extraction & Mining in large graphs
Compréhension approfondie du protocole TCP
常见面试题知识点之:分布式锁
数据库7-12
鴻蒙HarmonyOS 3官宣:7月27日正式發布;蘋果2023年放緩部分團隊招聘和支出;俄羅斯對穀歌重罰26億元|極客頭條
NPDP | can you be a good product manager without technical background?
mysql建库建表(一)
Siemens S7 simulator tutorial
页面请求拦截
【Matlab】解决使用Mex 报错There was a problem creating the mex file for Real Time Execution ,Please ensure y
最受IT公司欢迎的 30 款开源软件
明晚19点直播 | 深度剖析:数据湖中的对象存储