# springcloud学习 **Repository Path**: lkq55421/spring-cloud-learning ## Basic Information - **Project Name**: springcloud学习 - **Description**: spring-cloud学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-28 - **Last Updated**: 2022-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud学习 ## Eureka模块 集群搭建 ### Eureka的常用配置 ``` xml eureka: client: #eureka客户端配置 register-with-eureka: true #是否将自己注册到eureka服务端上去 fetch-registry: true #是否获取eureka服务端上注册的服务列表 service-url: defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址 enabled: true # 启用eureka客户端 registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔 instance: #eureka客户端实例配置 lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约 lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效 metadata-map: zone: jiangsu #所在区域 hostname: localhost #服务主机名称 prefer-ip-address: false #是否优先使用ip来作为主机名 server: #eureka服务端配置 enable-self-preservation: false #关闭eureka服务端的保护机制 ``` ### 使用到的模块 ``` springcloud-learning ├── eureka-server -- eureka注册中心 ├── eureka-security-server -- 带登录认证的eureka注册中心 └── eureka-client -- eureka客户端 ``` ## Ribbon的常用配置 ### 负载均衡功能演示测试 ``` 启动eureka-server于8887端口; 启动ribbon-service于8301端口; 启动user-service于8201端口; 启动另一个user-service于8202端口,可以通过修改IDEA中的SpringBoot的启动配置实现: ``` ``` ribbon: ConnectTimeout: 1000 #服务请求连接超时时间(毫秒) ReadTimeout: 3000 #服务请求处理超时时间(毫秒) OkToRetryOnAllOperations: true #对超时请求启用重试机制 MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数 MaxAutoRetries: 1 # 切换实例后重试最大次数 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法 ``` ### 指定服务进行配置 ``` 与全局配置的区别就是ribbon节点挂在服务名称下面,如下是对ribbon-service调用user-service时的单独配置。 user-service: ribbon: ConnectTimeout: 1000 #服务请求连接超时时间(毫秒) ReadTimeout: 3000 #服务请求处理超时时间(毫秒) OkToRetryOnAllOperations: true #对超时请求启用重试机制 MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数 MaxAutoRetries: 1 # 切换实例后重试最大次数 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法 ``` ### Ribbon的负载均衡策略 ``` 所谓的负载均衡策略,就是当A服务调用B服务时,此时B服务有多个实例,这时A服务以何种方式来选择调用的B实例,ribbon可以选择以下几种负载均衡策略。 com.netflix.loadbalancer.RandomRule:从提供服务的实例中以随机的方式; com.netflix.loadbalancer.RoundRobinRule:以线性轮询的方式,就是维护一个计数器,从提供服务的实例中按顺序选取,第一次选第一个,第二次选第二个,以此类推,到最后一个以后再从头来过; com.netflix.loadbalancer.RetryRule:在RoundRobinRule的基础上添加重试机制,即在指定的重试时间内,反复使用线性轮询策略来选择可用实例; com.netflix.loadbalancer.WeightedResponseTimeRule:对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择; com.netflix.loadbalancer.BestAvailableRule:选择并发较小的实例; com.netflix.loadbalancer.AvailabilityFilteringRule:先过滤掉故障实例,再选择并发较小的实例; com.netflix.loadbalancer.ZoneAwareLoadBalancer:采用双重过滤,同时过滤不是同一区域的实例和故障实例,选择并发较小的实例。 ``` ### 使用到的模块 ``` springcloud-learning ├── eureka-server -- eureka注册中心 ├── user-service -- 提供User对象CRUD接口的服务 └── ribbon-service -- ribbon服务调用测试服务 ```