定制化开发(六)ribbon-客户端负载均衡器的使用

介绍

定制化开发我们熟悉的它是服务端定制化开发的负载均衡,而ribbon定制化开发则是客户端负载均衡。

定制化开发再来看看之前的CloudConfig.java, +@LoadBalanced等价于ribbon。

package com.ft.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;import org.springframework.web.client.RestTemplate;@Configurationpublic class CloudConfig {    public CloudConfig() {    }    /**     * 会基于OKHttp3定制化开发的配置来配置RestTemplate     * @return     */    @Bean    @LoadBalanced       // 定制化开发默认的负载均衡算法:轮询    public RestTemplate restTemplate() {        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

ribbon定制化开发自定义策略

方式一,定制化开发启动类加上@RibbonClient
定制化开发还是以用户服务调用订单服务为例。

  1. 由于之前@LoadBalanced默认是轮询的负载均衡,这里可以自定义负载均衡规则,并指定为随机负载。在用户服务创建MyRule.java,包路径尽量别让spring扫描到。
@Configurationpublic class MyRule {    @Bean    public IRule iRule() {// 随机负载均衡        return new RandomRule();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 用户服务启动类配置ApplicationUser.java
@SpringBootApplication@EnableEurekaClient // 开启eureka client 注册到server中// ribbon自定义负载均衡@RibbonClient(name = "ORDER", configuration = MyRule.class)public class ApplicationUser {    public static void main(String[] args) {        SpringApplication.run(ApplicationUser.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 开启3个订单服务,并注册到eureka集群中。

    4.使用postman测试,发现是随机的负载均衡策略。

    方式二,用户服务application.yml配置中指定
    只需要加上末尾“配置指定自定义的ribbon规则”,测试ok。
############################################################## 用户微服务# web访问端口号  约定:8001#############################################################server:  # 动态设置端口号,方便部署集群  port: ${port:8001}  tomcat:    uri-encoding: UTF-8############################################################## 配置项目信息#############################################################spring:  application:    name: user############################################################## eureka配置信息#############################################################eureka:  server:    hostname: localhost    port: 7000  client:    # 所有的微服务都必须注册到eureka中    register-with-eureka: true    # 从注册中心获得检索服务实例,用户服务需要配置为true    # 用户服务要去获得其他服务的实例,然后去调用    fetch-registry: true    # 注册中心的服务地址    service-url:#      defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/      # 用户服务注册到eureka集群中      defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/  instance:    lease-renewal-interval-in-seconds: 3 # 调整微服务(eureka-client)和注册中心(eureka-server)之间的心跳时间    lease-expiration-duration-in-seconds: 5 # eureka距离最近的一次心跳等待剔除的时间(假设是3s发送一次心跳,但是某次3s后eureka没有收到心跳,则距离上次心跳5s后,eureka会剔除该节点)默认90s,当前设置为5s# 配置指定自定义的ribbon规则ORDER:  ribbon:    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

ribbon重试机制

  1. 引入maven相关依赖
		<dependency>           <groupId>org.springframework.retry</groupId>           <artifactId>spring-retry</artifactId>       </dependency>
  • 1
  • 2
  • 3
  • 4
  1. 用户服务application.yml配置
############################################################## 用户微服务# web访问端口号  约定:8001#############################################################server:  # 动态设置端口号,方便部署集群  port: ${port:8001}  tomcat:    uri-encoding: UTF-8############################################################## 配置项目信息#############################################################spring:  application:    name: user############################################################## eureka配置信息#############################################################eureka:  server:    hostname: localhost    port: 7000  client:    # 所有的微服务都必须注册到eureka中    register-with-eureka: true    # 从注册中心获得检索服务实例,用户服务需要配置为true    # 用户服务要去获得其他服务的实例,然后去调用    fetch-registry: true    # 注册中心的服务地址    service-url:#      defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/      # 用户服务注册到eureka集群中      defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/  instance:    lease-renewal-interval-in-seconds: 3 # 调整微服务(eureka-client)和注册中心(eureka-server)之间的心跳时间    lease-expiration-duration-in-seconds: 5 # eureka距离最近的一次心跳等待剔除的时间(假设是3s发送一次心跳,但是某次3s后eureka没有收到心跳,则距离上次心跳5s后,eureka会剔除该节点)默认90s,当前设置为5s# 配置指定自定义的ribbon规则ORDER:  ribbon:    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRuleribbon:  ConnectTimeout: 5000          # 客户端请求到负载均衡集群中某个节点的时候,第一次会创建一个连接,这里代表创建连接的超时时间,单位:ms  ReadTimeout: 5000             # 在连接创建好以后,调用接口的超时时间,单位:ms  MaxAutoRetries: 1             # 最大重试次数  MaxAutoRetriesNextServer: 2   # 切换到下个微服务实例的重试次数  # 当请求到某个微服务5s,超时后会进行重试,先重试连接自己当前的这个实例  # 如果当前重试失败1次,则会切换到访问集群中的下一个微服务实例,切换最大为2次  OkToRetryOnAllOperations: true # 是否对所有操作都进行重试logging:  level:    root: debug
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  1. 用户服务(1个节点)和订单服务(2个节点)注册到eureka集群。
  2. post发起调用,可以正常访问到订单服务的2个节点。此时,需要将某个订单服务stop,然后继续发起调用,观察idea用户服务控制台日志。
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发