
nacos ->依靠figen+ribbion 拦截器 服务发现调用NacosNamesServisegetAllInstances在第一次调用时候会缓存一份到本地
同时会开启延时1s定时任务更新
comalibabacloudnacosdiscoveryNacosDiscoveryClientAutoConfiguration#nacosDiscoveryClient
注册了NacosDiscoveryClient ,这是一个实现了DiscoveryClient服务发现的类
comalibabacloudnacosdiscoveryNacosDiscoveryClient#getInstances
获取所有服务,调用
comalibabanacosclientnamingNacosNamingService#selectInstances(javalangString, javalangString, boolean)
新版本NacosWatch不再监控,拓展点······
拓展知识点:
public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
事件监听类:
public abstract class AbstractAutoServiceRegistration<R extends Registration>
implements AutoServiceRegistration, ApplicationContextAware,
ApplicationListener<WebServerInitializedEvent> {
ApplicationEventPublisherAware 事件发布
SmartLifecycle 是一个接口。当Spring容器加载所有bean并完成初始化之后,会接着回调实现该接口的类中对应的方法(start()方法)。
comalibabacloudnacosdiscoveryNacosWatch#nacosServicesWatch
前置文章:
一、Spring Cloud-Erueka服务注册&发现
二、Spring Cloud-Nacos服务注册&发现
tips:Ctrl + F定位到所需内容快速阅读吧。
①常规项目:项目启动→读取applicationyml配置文件→创建Spring IOC容器→加载Bean;
②Nacos配置中心项目:项目启动→读取Nacos配置中心文件→读取applicationyml配置文件→创建Spring IOC容器→加载Bean;
注意 :此处的问题是Nacos server-addr相关配置在applicationyml中,所以引入bootstrapyml配置,来提前加载Nacos配置中心所需配置。
③Nacos配置中心项目:项目启动→读取bootstrapyml配置文件→读取Nacos配置中心文件→读取applicationyml配置文件→创建Spring IOC容器→加载Bean;
注意 :SpringCloud2020及以后的版本默认不启用 bootstrap 配置,我们需要在pom里面显式地引入,以开启bootstrapyml配置文件读取的支持。
user服务读取配置中心配置三要素:
①spring-application-name:应用名称-userservice;
②spring-profiles-active:配置文件环境-dev(代表开发环境develop);
③file-extension:文件扩展名-yaml;
配置中心处,配置文件完整名称:userservice-devyaml
①配置管理→配置列表→➕
②编写userservice-devyaml配置文件
①@Value注解注入配置属性
②方法内读取配置
在对应的@Value注解使用的类上使用@RefreshScope注解
编写Config类:prefix = "pattern" + [field] dateformat,与配置文件patterndateformat 对应即可。
配置优先级 :[spring-application-name][spring-profiles-active][file-extension]>[spring-application-name][file-extension]>本地配置;
即:服务名-环境类型yaml>服务名yaml>本地配置。
如果配置不同,则合并,相同则优先级高的覆盖优先级低的。
另外:extension-configs的加载后于shared-configs。
以上即为Nacos配置管理的基础内容,感谢阅读。
参考资料 :
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
为方便理解与表达,这里把 Nacos 控制台和 Nacos 注册中心称为 Nacos 服务器(就是 web 界面那个),我们编写的业务服务称为 Nacso 客户端;
Nacos 客户端将自己注册进 Nacos 服务器。《1 服务如何注册进 Nacos 注册中心》主要从 Nacos 客户端角度解释如何发送信息给 Nacos 服务器;《2 Nacos 服务器注册服务》主要从 Nacos 服务器角度解释注册原理;
《3 客户端查询所有服务实例》将从服务消费者和提供者的角度,解释服务消费者如何获取提供者的所有实例。服务消费者和提供者都是 Nacos 的客户端;
《4 客户端监听 Nacos 服务器以动态获取服务实例》从消费者客户端角度出发监听 Nacos 服务器,以动态获知提供者的变化;
首先启动Nacos,按照上篇文章的步骤,启动Nacos服务和项目,访问Nacos的web页面。确保项目中的服务都注册到注册中心当中了。在applicationyml同级目录下添加bootstrapyml,在Spring boot项目中bootstrapyml会比applicationyml优先初始化,所以我们需要在bootstrapyml中引入Nacos官方指定的配置文件即可(上篇文章中已经把Nacos作为配置中心的配置写入了applicationyml,现在只需要把它从applicaitonyml中剪切出来即可, 其中的spring:application:name会作为Nacos中新增配置时的Data ID,需要留意 ),再新增属性gorup进行分组测试,如下图
接着打开Nacos的服务的web页面,打开配置管理->配置列表,点击右侧新增按钮,进行新增。
Data ID: bootstrapyml配置文件中spring:application:name对应的名称 ;
Group:指定分组(便于不同环境下的项目配置管理,因为笔者这里属于测试,所以填写的是和上文中的配置文件中group对应的test一致);
描述:针对于该配置的描述;
配置格式:配置文件的格式,要和Data ID中的后缀格式一致(这里笔者用的是yml,那么下面就选择yaml,注意该位置也可以选择properties,但是必须和上面bootstrapyml文件中的file-extension的值相匹配);
配置内容:具体的配置内容(这里笔者将项目中的applicationyml中的配置全部拷贝至其中);
测试启动consumer服务,在applicationyml中为空的时候,项目启动端口还是如Nacos配置中的9011,说明项目依赖Nacos的配置中心成功,其他服务如法炮制即可:
新增一个测试Controller,然后加上@RefreshScope注解,表明该Controller中的配置数据为自动刷新 。
编辑Nacos中的配置文件consumer新增相关参数type: test,访问Controller,返回test。效果如下图:
将Nacos中consumeryml文件的type: test修改为type: prod,在不重启项目的情况下重新访问对应的controller,效果如下图:
因为Dubbo是属于各个服务之间都要公用的依赖,所以将其引入cloud-common当中,详细的版本可以去 mvnrepository 搜索合适自己项目的
引入依赖后需要编写消费者服务中的配置文件,将Dubbo服务注册至Nacos,新增如下内容,其中subscribed-services指的是生产者服务,prot:-1指的是端口随机,registry:address:指的是Dubbo对应的注册中心那这里就应该设置为Nacos
接下来新增接口服务,项目类型为Maven项目,在项目中新增一个接口。并在cloud-provider(生产者)和cloud-consumer(消费者)pomxml文件中都引入该模块
在生产者实际服务中实现该接口对应的方法
在服务消费者的Controller中引入该Service,并在该Service上加入@Reference注解,注意在引入jar包的时候选择带有Dubbo的,不要使用Jdk原生的
编写消费者服务中测试Dubbo调用的接口,进行测试,测试结果如下图:
以上就是关于nacos 节点挂了,如何调用全部的内容,包括:nacos 节点挂了,如何调用、Spring Cloud-Nacos配置管理、微服务架构 | *3.5 Nacos 服务注册与发现的源码分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)