扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
创新互联从2013年创立,先为管城等服务建站,管城等地企业,进行企业商务咨询服务。为管城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。一、什么是 Alibaba Nacos
二、Nacos的基本使用
1.Nacos的安装
2.Nacos服务注册发现相关API
3.Nacos 集成Spring Boot实现服务注册与发现
三、Dubbo 使用Nacos实现注册中心
四、Spring Cloud Alibaba Nacos Discovery
1.完成服务注册与发现功能
2.服务端开发
3.消费端开发
五、Nacos注册中心的实现原理
1.服务注册的功能主要体现:
2.原理步骤
六、Nacos配置中心的简单使用
1.简介
2.Nacos集成Spring Boot实现统一配置管理
七、Spring Cloud Alibaba Nacos Config
1.在Spring Cloud生态下Nacos Config的使用步骤
2.动态更新配置
3.基于Data ID配置YAML的文件扩展名
4.不同环境的配置切换
5.Nacos Config 自定义 Namespace 和 Group
Namespace
Group
八、Nacos Config实现原理
1.Nacos Config针对配置管理提供了4种操作
2.配置的存储
3.动态监听之Pull OR Push
Pull
Push
Nacos的监听机制
Nacos 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos的关键特性如下:
Nacos支持三种部署模式:单机、集群、多集群;
需要注意:Nacos依赖Java环境,并且要求使用JDK1.8以上版本;
Nacos的安装方式有两种:源码安装、使用已编译好的安装包;
以下举例为源码安装:
Nacos提供了SDK及Open API的方式来完成服务注册与发现等操作,SDK本质上是对HTTP请求的封装
Open API: /nacos/v1/ns/instance (POST)
SDK:
void registerInstance(String serviceName,String ip,int port) throws NacosException;
void registerInstance(String serviceName,String ip,int port,String clusterName) throws NacosException;
void registerInstance(String serviceName,Instance instance) throws NacosException;
参数说明:
serviceName:服务名称
ip:服务实例IP
port:服务实例Port
clusterName:集群名称,表示该服务实例属于哪个集群
instance:实例属性,实际上就是把上面这些参数封装成一个对象
调用方式:
NamingService naming
=NamingFactory.createNamingService(System.getProperty("serveAddr"));
naming.registerInstance("nacos_test","192.168.1.1","8080","DEFAULT");
Open API:/nacos/v1/ns/instance/list (GET)
SDK:
List
getAllInstances(String serviceName) throws NacosException; List
getAllInstances(String serviceName,List clusters) throws NacosException; 参数说明:
serviceName:服务名称
cluster:集群列表,可以传递多个值
调用方式:
NamingService naming
=NamingFactory.createNamingService(System.getProperty("serveAddr"));
naming.getAllInstances("nacos_test",true);
3.Nacos 集成Spring Boot实现服务注册与发现Open API:/nacos/v1/ns/instance/list (GET)
SDK:
void subscribe (String serviceName,EventListener listener) throws NacosException;
void subscribe (String serviceName,List
clusters,EventListener listener) throws NacosException; 参数说明:
EventListener:当服务提供者实例发生上、下线时,会触发一个事件回调
服务监听有两种方式:
第一种是客户端调用/nacos/v1/ns/instance/list 定时轮询。
第二种是基于 DatagramSocket的UDP协议,实现服务端的主动推送。
通过Spring Boot集成Nacos实现一个简单的服务注册与发现功能
nacos-sample-api,接口定义类的依赖
nacos-discovery-spring-boot-starter,Nacos的Starter组件
dubbo-spring-boot-starter ,Dubbo的Starter组件,添加Dubbo依赖
dubbo.application.name=spring-boot-dubbo-nacos-sample
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
Nacos作为Spring Cloud Alibaba中服务注册与发现的核心组件,可以很好的帮助开发者将服务自动注册到Nacos服务端,并且能够动态感知和刷新某个服务实例的服务列表。
1.完成服务注册与发现功能将Spring Cloud Alibaba Nacos Discovery集成到Spring Cloud Alibaba Dubbo,代码如下
2.服务端开发spring-cloud-starter:Spring Cloud核心包
spring-cloud-starter-dubbo:引入Spring Cloud Alibaba Dubbo
spring-cloud-dubbo-sample-api:API的接口声明
spring-cloud-alibaba-nacos-discovery:基于Nacos的服务注册与发现
spring-cloud-context (2.1.1.RELEASE)
注意:spring-cloud-starter、spring-cloud-alibaba-nacos-discovery由于版本冲突,需要用exclusion标签排除掉spring-cloud-context子包,在pom文件中重新引回2.1.1版本的spring-cloud-context
spring.application.name=spring-cloud-nacos-sample
dubbo.scan.base-packages=com.gupaoedu.book.nacos.bootstrap 备注:功能等同于@DubboComponentScan,指定Dubbo服务实现类的扫描包路径
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.address=spring-cloud://localhost 备注:Dubbo服务注册中心的配置地址,它的值spring-cloud://localhost表示挂载到Spring Cloud注册中心,不配置的话会提示没有配置注册中心的错误
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 备注:Nacos服务注册中心的地址
spring-boot-starter-web :演示需要就加不然不用加
spring-cloud-starter
spring-cloud-starter-dubbo
spring-cloud-nacos-sample-api
spring-cloud-alibaba-nacos-discovery
dubbo.cloud.subscribed-services=spring-cloud-nacos-sample
dubbo.scan.base-packages=com.gupaoedu.book.nacos.bootstrap
spring.application.name=spring-cloud-nacos-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
Nacos的架构图中有两个模块,分别是Config Server和Naming Server。Naming Server是实现注册中心的核心模块,Config Server是Nacos用于实现配置中心的核心模块,它实现了对配置的CRUD、版本管理、灰度管理、监听管理、推送轨迹、聚合数据等功能。
2.Nacos集成Spring Boot实现统一配置管理Nacos是一个独立组件,它可以独立部署和应用,在集成到Spring Cloud之前,可以结合Spring Boot来实现统一配置管理
@NacosPropertySource(dataId="example",autoRefreshed=true)
注释:用于加载dataId为example的配置源,autoRefreshed表示开启自动更新
@NacosValue(value="${info:Local Hello World}",autoRefreshed=true)
注释:设置属性的值,其中info表示key,而Local Hello World代表默认值。也就是说如果key不存在,则使用默认值。
控制台创建方式:通过http://ip:8848/nacos控制台进入 配置管理-配置列表,单击创建按钮进入创建界面。Data ID:表示Nacos中某个配置集的ID;Group:表示配置所属的分组;配置格式:当前配置内容所遵循的格式。
注意:dataId和group必须与NacosPropertySource中配置保持一致,否则无法匹配到配置内容
spring.application.name=spring-cloud-nacos-config-sample
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 注释:设置Nacos配置中心地址
spring.cloud.nacos.config.prefix=example 注释:表示Nacos配置中心的Data ID的前缀
注:在Spring Boot中有两种上下文配置,一种是bootstrap,一种是application。bootstrap是父上下文,也就是说bootstrap加载优先于application。由于在加载远程配置之前,需要读取Nacos配置中心的服务地址信息,所以Nacos服务地址等属性配置需要放在bootstrap.properties文件中
DataId:example
Group:DEFAULT_GROUP
配置内容:info=Nacos Server Data : Hello World
2.动态更新配置ConfigurableApplicationContext context=
SpringApplication.run(SpringCloudNacosConfigSampleApplication.class,args);
String info=context.getEnvironment().getProperty("info");
注:从Environment中读取配置,info为得到的配置数据
配置中心必然需要支持配置的动态更新,也就是在配置中心上修改配置的值之后,应用程序需要感知值的变化。
3.基于Data ID配置YAML的文件扩展名Spring Cloud Alibaba Nacos Config从Nacos Config Server中加载配置时,会匹配Data ID。
Data ID默认规则是:${prefix}-${spring.profile.active}.${file-extension}。
在实际应用中,如果用YAML格式的配置,Nacos Server也提供了YAML配置格式的支持,步骤如下:
Data ID:spring-cloud-nacos-config-sample.yaml
Group:DEFAULT_GROUP
配置格式:YAML
配置内容:info:yaml config type
在Spring Boot中,可以基于spring.profiles.active实现不同环境的配置切换。比如:开发环境、测试环境、预生产环境、生产环境。具体切换步骤如下:
spring-cloud-nacos-config-sample-test.properties,配置内容为info-test
spring-cloud-nacos-config-sample-prod.properties,配置内容为info=prod env:Hello
Nacos Config中默认的行为 Namespace:public;Group:DEFAULT_GROUP
Namespace用于解决多环境及多租户数据的隔离问题,比如在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境隔离。或者多用户的场景中,每个用户可以维护自己的Namespace,实现每个用户的配置数据和注册数据的隔离。
需要注意的是:在不同的Namespace下,可以存在相同的Group和DataId
操作:
是Nacos中用来实现Data ID分组管理的机制,它可以实现不同Service/DataId的隔离
操作:不需要提前创建,只需要在创建的时候指定
SDK:public String getConfig(String dataId,String group,long timeoutMs)
throws NacosException;
API(GET): /nacos/v1/cs/configs
SDK:public void addListener(String dataId,String group,Listener listener);
API(POST):/nacos/v1/cs/configs/listener
SDK:public boolean publishConfig(String dataId,String group,String content)
throws NacosException;
API(POST):/nacos/v1/cs/configs
2.配置的存储SDK:public boolean removeConfig(String dataId,String group) throws NacosException;
API(DELETE):/nacos/v1/cs/configs
Nacos服务端的数据存储默认采用的是Deaby数据库,除此之外,还支持MySQL数据库。
3.动态监听之Pull OR Push Pull表示客户端从服务端主动拉取数据
优缺点:在Pull模式下,客户端需要定时从服务端拉取一次数据,由于定时任务会存在一定的时间间隔,所以不能保证数据的实时性,并且在服务端配置长时间不更新的情况下,客户端的定时任务会做一些无效的Pull
Push表示服务端主动把数据推送给客户端
优缺点:在Push模式下,服务端需要维持与客户端的长链接,如果客户端的数量比较多,那么服务端需要耗费大量的内存资源来保存每个连接,并且为了保证连接的有效性,还需要心跳机制来维持每个连接的状态。
Nacos的监听机制Nacos采用的是Pull模式,但不是简单的Pull模式,而是一种长轮询机制。客户端采用长轮询的方式定时发起Pull请求,去检查服务端配置信息是否发生了变化:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流