网站建设的讲话要求,家在临深业主论坛家在深圳,一些js特效的网站推荐,网络营销服务有限公司前置准备#xff1a;
分别提供订单系统#xff08;OrderService#xff09;和用户系统#xff08;UserService#xff09;。订单系统主要负责订单相关信息的处理#xff0c;用户系统主要负责用户相关信息的处理。
一、服务注册与发现
1.1、在父工程当中引入Nacos依赖 …前置准备
分别提供订单系统OrderService和用户系统UserService。订单系统主要负责订单相关信息的处理用户系统主要负责用户相关信息的处理。
一、服务注册与发现
1.1、在父工程当中引入Nacos依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactId version2.2.6.RELEASE/versiontypepom/typescopeimport/scope
/dependency1.2、修改配置文件 cloud:nacos:server-addr: localhost:8849 #nacos服务地址 1.3、Nacos服务分级存储 Nacos服务分级存储的主旨是服务尽可能的调用本地集群提供的服务跨集群调用延迟较高本地集群提供的服务不可用时再去访问其他集群提供的服务。 什么意思呢看图 左边为一个集群HZ右边也是一个集群SH两个集群内部都存在orderService和userService当某个集群HZ的orderService调用userService时会先查看本集群HZ是否提供该服务提供则直接调用不提供则调用其它集群SH的userService进行远程调用。 如何设置集群属性 在nacos配置项下面添加如下属性即可 discovery:cluster-name: HZ #集群名称这里HZ代指杭州 总结 1.4、NacosRule负载均衡 将orderService注册到HZ集群userService1和userService2注册到HZ集群userService3注册到上海集群按照1.3的描述orderService会优先调用本集群提供的服务即userService1和userService2但是经过测试在三个userService都无故障的情况下三个服务都被orderService调用了这又是为什么负载均衡规则需要采用NacosRule
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #针对某微服务设置其负载均衡规则 NacosRule优先选择本地集群再在本机集群采用随机的方式选择服务实例。 1.5、Nacos根据权重负载均衡 说明刚注册的实例默认权重为1按照上图将8081的权重设为0.1随后使用orderService连续调用userService两个实例的访问比例就会趋近于权重比值。 小技巧当我们对某服务进行更新上线时可以先将更新后的实例权重调成0进行服务注册后设的较小一些观察其是否出现BUG等问题等观察一段时间后发现没有出现什么问题的时候就可以将该实例的权重调的大一些将其他实例的权重调的小一些例如0这样做的目的在于逐个实例完成更新这样就可以实现用户无感知的系统更新。 1.6、Nacos环境隔离 环境隔离的主要作用将dev、prod、test环境下的服务区分开来。 2.在配置文件当中配置环境ID
在Nacos配置下配置如下属性 discovery:namespace: 1bed7a99-086a-4766-a66f-891b508468b7 #指定空间 二、Nacos和Rureka对比 Nacos和Eureka异同 同 1、消费者会将拉取到的服务列表缓存到本地后续使用直接从缓存当中取 2、消费者会定期拉取最新的服务列表每隔30s 异 3、Nacos会把服务的提供者划分为临时实例和非临时实例。 ①临时实例会主动向Nacos发送心跳检测告知Nacos自己的健康状态一旦不发了nacos就会默认你宕机了就会将你从服务列表剔除。和Eureka完全一致 ②非临时实例nacos主动发请求询问非临时实例的健康状态一旦某天非临时实例真的挂掉了nacos也不会将他剔除掉而是将其标记为不健康等待该实例健康乐再对外提供服务。 4、在消费者拉取玩服务列表的这段时间里一旦Nacos发现某个服务的实例挂了nacos会立即将服务列表变更推送给消费者。 如何设置临时实例和非临时实例 在配置文件的nacos配置当中添加如下属性 ephemeral: false #是否是临时实例 三、配置中心
3.1、统一配置管理
在以往的开发过程当中我们习惯性的将系统的配置都写在配置文件当中一旦某项配置发生变更时我们以往采取的做法是在配置文件当中逐个进行修改。Nacos提供了配置管理我们只需要在代码当中获取其配置即可后续配置信息一旦发生改变我们也无需在代码层面进行任何修改而是由nacos告知系统配置发生了改变并采用新的配置。
3.1.1、新建配置 Data ID:服务名称-配置环境dev、test、prod.yaml或properties 3.1.2、读取Nacos上的配置文件 问题引出及解决 SpringBoot启动时会先读取Nacos上的配置文件再读取本地的配置文件两者进行结合进行使用我们遇到的问题是什么呢我们不读取本地配置文件如何知道Nacos的地址呢SpringBoot有一个比application更优先执行的配置文件-》bootstrap.yml文件将nacos的地址信息配置在这个文件当中即可。 spring:application:name: userservice #服务名称profiles:active: dev #环境cloud:nacos:server-addr: localhost:80config:file-extension: yaml #文件格式 3.1.3、引入nacos配置管理依赖 !--nacos配置管理依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency 3.1.4、从nacos当中读取配置 Value(${pattern.dateformat})public String dateformat;GetMapping(/now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.dateformat));} 3.2、配置热更新 3.3、多环境配置共享
微服务启动时会从nacos读取多个配置文件
【spring.application.name】-【spring.profiles.acive】.yaml例如userservice-dev.yaml【spring.application.name】.yaml例如userservice.yaml
无论profiles如何变化【spring.application.name】.yaml这个配置文件一定会加载因此多环境共享配置文件可以写入这个文件。 特殊情况 1、假设在userservice-dev.yaml和userservice.yaml当中存在相同的配置那么会读取谁的配置进行使用呢 结论1userservice-dev.yaml配置的优先级userservice.yaml配置的优先级 2、假设在userservice.yaml和本地配置当中也存在相同的配置又会读取谁的配置进行使用呢 结论2userservice.yaml配置的优先级本地配置的优先级 四、Nacos集群 参考Nacos集群的搭建过程详解