再好好学习一下SpringCloud,毕竟b站出了好新的视频了。好久没用,加深一下印象。
一、Eureka
(1)简单使用
pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置yml
//注册中心配置
eureka:
client:
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
defaultZone: http://127.0.0.1:10086/eureka
register-with-eureka: false # 不注册自己 默认值为 true
fetch-registry: false #不拉取服务 默认值为 true
//服务发现
eureka:
client:
service-url: # EurekaServer地址
defaultZone: http://127.0.0.1:10086/eureka/
引导类添加注解
@EnableEurekaServer
其他相关配置
eureka:
instance:
lease-renewal-interval-in-seconds: 30 //服务续约的间隔,默认30s
lease-expiration-duration-in-seconds: 90//服务时效的时间,默认90s
正常注册服务完成以后,服务提供者会维持一个心跳(定时向注册中心发起Rest请求)。这就是服务的续约。心跳周期默认是30秒一次,超过90秒会认为是宕机。
服务下线与失效剔除
服务下线:要是服务正常关闭操作时,他会出发一个服务下线的REST的请求给中心。中心接收到请求之后,将该服务设置为下线。
失效剔除:有时候服务可能由于内存溢出或者网络故障等导致服务不能正常工作。中心并未收到“服务下线”的请求。每隔60秒会踢出标记为宕机的服务。
eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开) 建议生产环境开启自我保护机制
Eureka会有自我保护机制,当心跳失败比例超过阙值,那么开启自我保护,不再剔除服务。
二、Ribbon
Ribbon中有个拦截器类LoadBalancerInterceptor继承了ClientHttpIn…tor,这是一个http请求拦截器。Ribbon从Eureka Server中获取到服务列表后,根据IRule接口选择负载均衡算法分配将请求转发到相对应的微服务。
user_service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
//可以配置com.alibaba.cloud.nacos.ribbon.NacosRule 在使用nacos里面就可以集群下面默认先使用同一集群下面的服务
默认规则是ZoneAvoidanceRule,根据Zone选择服务列表,然后轮训。
一般是默认是懒加载,就是第一次访问时才会去创建负载均衡客户端,往往会超时。如果需要采用饥饿加载,即项目启动就创建。
ribbon:
eager-load:
enabled: true
clients: user-service # 多个服务使用 "," 分割
三、Nacos
cmd
startup.cmd -m standalone
管理依赖,springcloud那个管理包里面是没有nacos。
//父工程添加管理依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</pom>
<scope>import</scope>
</dependency>
//消费者
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
yml配置:
spring.cloud.nacos.server-addr: localhost:8848 //默认为8848端口
服务分级存储模型
服务-集群-实例
yml配置
spring.cloud.nacos.discovery.cluster-name: xxx //集群名称
nacos根据负载均衡
集群优先,然后随机选实例
nacos提供了权重越大,使用率越大的机制(0-1)网页设置即可
环境隔离
namespace-group-service/data 最外层隔离
spring.cloud.nacos.discovery.namespace: xxx //命名空间的uuid 要是两个服务共同使用,那就要把两个服务放在同一个环境里面
nacos和eureka区别
共同点:都支持服务注册和服务拉取;都支持服务提供者心跳方式做健康检测
区别:nacos有临时采用心跳模式,非临时采用主动检测模式
默认是临时实例,采用心跳检测,要是不健康,直接消除掉。非临时实例不采用心跳检测,会主动去问实例,主动询问会比心跳检测快一点。
要是有服务断了,就会主动告诉消费者,重新拉取服务列表。eureka定时拉取
nacos集群ap方式,要是有非临时实例就是cp模式,eureka集群是ap模式