ribbon客户单负载均衡器原理解析,ribbon如何通过RestTemplate实现负载均衡(一)

在这里插入图片描述

ribbon与传统负载均衡器的区别

在这里插入图片描述
传统的服务端负载均衡是通过如nginx他是将接收到请求通过在nginx上配置的信息将请求分配到指定 的服务器上达到负载均衡
在这里插入图片描述

客户端负载均衡,需要客户端提前知道服务器的具体信息通过某种算法和规则rule,从而直接定位到需要的服务器。但是客户端必须实时知道服务端集群的实时存活情况和实际数量(包括新增和删除)此时就可以通过ribbon来实现
在这里插入图片描述

在这里插入图片描述
引入Eureka时已经引入Ribbon

在这里插入图片描述

在这里插入图片描述
Rule:负载均衡规则
Ping:心跳检测
ServerList:需要再ribbon保存完整服务器IP集合,只有知道了信息集合才能知道如何使用Rule

在这里插入图片描述

  • RoundRobinRule .轮询规则
  • AvailabilityFilteringRule 根据服务是否死掉或者服务处于高并发来分配权重
  • WeightedResponseTimeRule 根据响应时间分配权重
  • RandomRule 随机原则
  • ZoneAvoidanceRule
  • BestAvailableRule
  • RetryRule 重试次数
    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
ribbon通过负载均衡的RestTemplate成功访问到client

基于Eureka的配置我们做下修改

Server yml文件

spring:
  application:
    name: service-register-center
  mandatory-file-encoding: UTF-8
  http:
    encoding:
      enabled: true
      charset: UTF-8

logging: #日志文件
  level:
    root: info
  file:
    max-size: 15MB
    path: service-register-center-log
  pattern:
    dateformat: yyyy-MM-dd HH:mm:ss.SSS
server:
  port: 10097
  undertow:
    accesslog:
      enabled: true
      dir: undertow-access-logs
      pattern: common
      prefix: service_register_center_access_log.
      suffix: log

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    shutdown:
      enabled: true

eureka:
  instance:
    hostname: node1
  ## 表示为Erureka客户端
  client:
    ## 单台server为服务器需要注册到服务器上 (如果存在多台server需注册)
    register-with-eureka: false
    ## 获取注册列表的信息  道理同上 基本两者参数是一样的
    fetch-registry: false
    service-url: # Eureka服务提供地址
      defaultZone: http://node1:10097/eureka/

client yml文件

server:
  port: 9090

spring:
  application:
    name: eureka-client

eureka:
  ## 表示为Erureka客户端
  client:
    ## 单台server为服务器不需要注册到服务器上
    register-with-eureka: true
    ## 获取注册列表的信息  道理同上 基本两者参数是一样的
    fetch-registry: true
    service-url: # Eureka服务提供地址
      defaultZone: http://node1:10097/eureka/
student:
  information:
    address: shanghai
    name: zhangsan

重新建个spring-cloud-ribbon项目 配置同client

spring:
  application:
    name: eureka-ribbon-client
server:
  port: 8888

eureka:
  ## 表示为Erureka客户端
  client:
    ## 单台server为服务器不需要注册到服务器上
    register-with-eureka: true
    ## 获取注册列表的信息  道理同上 基本两者参数是一样的
    fetch-registry: true
    service-url: # Eureka服务提供地址
      defaultZone: http://node1:10097/eureka/

在spring-cloud-ribbon项目中新增
config

@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced //增加负载均衡 用于标记要配置为使用LoadBalancerClient的RestTemplate或WebClient bean的注释。
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

service


@Service
public interface RibbonService {

    String info();
}

impl

@Service
public class RibbonServuceImpl implements RibbonService {


    @Autowired
    private RestTemplate restTemplate;


    @Override
    public String info() {
        //我们在微服务调用时不在显式指定其服务ip地址只需要要指定client的服务名称和返回类型即可。
        return this.restTemplate.getForObject("http://eureka-client/info ", String.class);
    }
}

controller

@RestController
public class RibbonController {

    @Autowired
    private RibbonService ribbonService;
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/info")
    public String info() {
        return this.ribbonService.info();
    }

    @GetMapping("/serviceInfo")
    public String serviceInfo() {
        //获取eureka-client的客户端
        ServiceInstance serviceInstance = this.loadBalancerClient.choose("eureka-client");
        //获取客户端的端口号
        String portInfo = "port: " + serviceInstance.getPort();
        return portInfo;
    }
}

启动类

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudRibbonApplication.class, args);
    }

}

依次启动server,client,ribbon 访问http://node1:10097
在这里插入图片描述
访问http://node1:8888/info
在这里插入图片描述
此时在启动一个client(端口9091)
在这里插入图片描述
此时访问http://node1:8888 /serviceInfo
在这里插入图片描述
刷新变成
在这里插入图片描述
此时就实现了客户端的负载均衡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值