关于公司网站开发的事项,做哪个网站的人多,深圳网站建设的基本知识,网络推广公司哪个好微服务技术一 技术栈图一、注册中心Eureka概念#xff1a;搭建EurekaServer服务注册服务发现#xff08;消费者对提供者的远程调用#xff09; 二、Ribbon负载均衡负载均衡的原理#xff1a;LoadBalanced负载均衡的策略#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安… 微服务技术一 技术栈图一、注册中心Eureka概念搭建EurekaServer服务注册服务发现消费者对提供者的远程调用 二、Ribbon负载均衡负载均衡的原理LoadBalanced负载均衡的策略IRule懒加载 三、Nacos注册中心Nacos的安装服务注册到NacosNacos服务分级存储模型1、配置服务集群属性2、根据集群负载均衡NacosRule3、根据权重负载均衡 Nacos环境隔离 - namespace修改一个服务所处的空间 临时实例与非临时实例 四、Nacos配置管理统一配置管理配置热更新配置共享搭建Nacos集群 技术栈图
微服务完整的技术栈如图 技术栈学习
一、注册中心Eureka
概念
在Eureka架构中微服务角色有两类EurekaServer
服务端注册中心 记录服务信息心跳监控 EurekaClient:客户端 Provider服务提供者例如案例中的user-service注册自己的信息到EurekaServer每隔30秒向EurekaServer发送心跳consumer服务消费者例如案例中的 order-service 根据服务名称从EurekaServer拉取服务列表基于服务列表做负载均衡选中一个微服务后发起远程调用 什么是消费者提供者 消费者调用其他服务提供者被调 A调BB调CB是什么角色 B的角色要看相对于谁而言 一个服务既可以是消费者又可以是提供者 搭建EurekaServer
1、创建项目引入 spring-cloud-starter-netflix-eureka-server 的依赖版本依赖父工程的版本所以没写
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId
/dependency2、编写启动类添加 EnableEurekaServer 注解 3、添加application.yml文件编写配置
server:port: 1111 # 自定义端口号
spring:application:name: eurekaserver # eureka的服务名称
eureka:client:service-url: # eureka的地址信息defaultZone: http://localhost:1111/eureka服务注册
1、在需要注册的项目中引入 spring-cloud-starter-netflix-eureka-client 的依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency2、在application.yml文件编写配置
spring:application:name: xxxservice # 服务的名称
eureka: client:service-url:defaultZone: http://localhost:1111/eureka下图是注册了两个服务可以看到两个客户端的服务和eureka的服务都存在。 一个服务注册两个实例
服务发现消费者对提供者的远程调用
【服务拉取是基于服务名称获取服务列表然后在对服务列表做负载均衡】
1、修改服务的代码修改访问的路径用服务名代替ip、端口。下图是之前的路径写法。 修改为String url http://xxxservice/user/ …… ;2、在yyy-service项目组的启动类中的RestTemplate添加负载均衡的注解
Bean
LoadBalanced //负载均衡的注解因为上面我们对xxxservice服务创建了两个实例
public RestTemplate restTemplate() {return new RestTemplate();
}二、Ribbon负载均衡 负载均衡的原理LoadBalanced LoadBalanced源码分析取到的负载地址 LoadBalancerInterceptor.java 继续 loadBalancer.execute 进入RibbonLoadBalancerClient.java 在其内部方法中会有IRule 规则接口有轮询随机等负载规则 总结如图 负载均衡的策略IRule
上面提到IRule接口这里做一个简单介绍理解一下负载规则的继承关系 可以通过定义IRule实现修改负载均衡规则有两种方式 1、代码方式在消费者的启动类中定义一个戏得IRule Bean
public IRule randomRule() {return new RandomRule();
}2、配置文件方式在消费者的application.yml文件中添加新的配置也可以修改规则 xxxservice: # 先指定提供者服务名称ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则注意 两种方法的作用范围是不一样的第一种消费者所调的全体服务都是这种规则第二种指定了提供者的服务名是有所指的。
懒加载
Ribbon默认是采用懒加载及第一次访问时才会五去创建LoadBalanceClient 请求时间过长。 而饥饿加载则会在项目启动时创建降低第一次访问的耗时。 配置开启饥饿加载
ribbon:eager-load:enabled: true # 开启饥饿加载clients: xxxservice # 指定对xxxservice 这一个服务饥饿加载ribbon:eager-load:enabled: true # 开启饥饿加载clients: # 多个服务- xxxservice- zzzservice三、Nacos注册中心
Nacos是阿里巴巴的产品现在是SpringCloud中的一个组件相比Eureka功能更加丰富。
Nacos的安装 安装包 GitHub主页https://github.com/alibaba/nacos GitHub的Release下载页https://github.com/alibaba/nacos/releases windows的安装与启动很简单可以参考自己搜索资料进行 就说一下启动的两种方式 1 文件解压后有bin目录中的startup.cmd双击就可以启动2 bin目录下打开cmd输入启动命令 startup.cmd -m standalone 。 启动成功会有带nacos的banner与网址和completed的显示信息。 http://192.168.150.1:8848/nacos/index.html 会有浏览器窗口默认账号密码都是nacos 。
服务注册到Nacos
1、在父工程中添加spring-cloud-alibaba的管理依赖
dependenygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.5.RELEASE/versiontypepom/typescopeimport/scope
/dependeny2、提醒eureka的依赖配置要删掉3、添加nacos的客户端依赖
dependenygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependeny4、修改消费者与提供者服务中application.yml文件添加nacos地址
spring:cloud:nacos:server-addr: localhost:8848 # nacos的服务地址默认就是88485、打开nacos的服务管理列表可以看到服务已经注册到nacos中。点开 “详情” 可以看到该服务的一些信息
Nacos服务分级存储模型 一级是服务例如userservice 二级是集群例如杭州或上海 三级是实例例如杭州机房的某台部署了xxxservice的服务器 1、配置服务集群属性
1、修改application.yml添加配置内容
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 配置集群名称即机房位置例如HZ,杭州这是将提供者配置了集群属性消费者配置同上当消费者调用时由于负载均衡的影响会进行轮询的规则找到与自己同集群服务优先使用就要进行负载均衡的修改
2、根据集群负载均衡NacosRule
1、修改yyyservice(消费者)中的application.yml设置集群位HZ
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ2、然后在yyy-service中设置负载均衡的IRule为NacosRule这个规则优先会寻找与自己同集群的服务
yyyservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则3、注意将xxx-service的权重都设置为1 在Nacos的控制台可以设置实例的权重值 NacosRule负载均衡策略 1、优先选择同集群服务实例 2、本地集群找不到提供者才去其它集群寻找并且会报警告 3、确定了可用实例列表后在采用随机负载均衡挑选实例 3、根据权重负载均衡
1、在Nacos控制台可以设置实例的权重值首先选中实例后面的编辑按钮2、将权重设置会发现小于1的权重被访问到的频率大大降低 实例的权重控制 1、Nacos控制台可以设置实例的权重值在0~1之间 2、同集群内的多个实例权重越高被访问的频率越高 3、权重设置为0则完全不会被访问 Nacos环境隔离 - namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西用来做最外层隔离。 nacos默认有一个“public (保留空间)”。 新建命名空间的时候命名空间ID可以不填会随机生成。 不同namespace下的服务是不可见的 修改一个服务所处的空间
在服务的application.yml添加namespace
spring: cloud:nacos:server-addr: localhost:8848discovery:cluster-name: SH # 上海namespace: xxxxxxxxxxxxxxxx # 命名空间ID临时实例与非临时实例
服务注册到Nacos时可以选择注册为临时实例或非临时实例
spring:cloud:nacos:discovery:ephemeral: false # 设置非临时实例默认是true临时【主动检测对服务的压力比较大所以一般推荐临时实例】
四、Nacos配置管理
统一配置管理
1、在Nacos中添加配置文件 Data-ID相当于配置文件名一般不要定义为application.yml可以使用 “服务名-环境.yaml” 。Group分组不动就可描述就是描述配置格式选择 YAML配置内容做热更新的配置 2、在某个服务的pom中引入Nacos的配置管理客户依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency3、在服务中的resource目录添加一个 bootstrap.yml 文件这个文件是引导文件优先级高于application.yml 配置nacos地址、当前环境、服务名称、文件后缀名决定了程序启动时去nacos读取哪个文件。
spring:application:name: xxxservice # 服务名称profiles:active: dev # 开发环境此处是devcloud:nacos:server-addr: localhost:8848 # nacos地址config: file-extension: yaml # 文件名后缀注意在原本的application.yml中关于服务名称和nacos服务的配置删掉
配置热更新
热更新服务的配置修改且修改后不需要重启服务配置就能生效。
方式一在Value注入的变量所在类上(Controller) 添加注解RefreshScope 方式二使用ConfigurationProperties注解自动刷新 【前缀名与变量名两者拼接与配置文件一致就能完成属性的自动配置】
配置共享
微服务启动时会从nacos读取多个配置文件:
[spring.application.name]-[spring-profiles.active].yaml例如xxxservice-dev.yml[spring-application.name].yaml例如userservice.yml
无论profile如何变化[spring-application.name].yaml文件一定会加载因此多环境贡献配置可以写入这个文件。 【详细建议主攻一下这个环境共享】
搭建Nacos集群 搭建集群的基本步骤 搭建数据库初始化数据表结构下载nacos安装包配置nacos启动nacos集群nginx反向代理 配置集群nacos 进入nacos的conf目录修改配置文件cluster.conf.example重命名为cluster.conf配IP 修改application.properties文件添加数据库配置 配置完成后复制三份模拟将三个nacos的端口改为不一样的启动nacos在bin目录下的命令是startup nginx的反向代理 修改conf/nginx.conf文件配置 此时访问nacos的路径为localhost/nacos 即可进入nacos的网址虽然只有一个网址由于nginx的存在nacos做了负载均衡