做网站含备案费么,百度seo关键词外包,两人合伙做网站但不准备开公司,怎么用jsp做网站详细1. 前言Ribbon
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说#xff0c;Ribbon是Netflix发布的开源项目#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时#xff0…1. 前言Ribbon
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说Ribbon是Netflix发布的开源项目主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时重试等。简单的说就是在配置文件中列出Load Balancer简称LB后面所有的机器Ribbon会自动的帮助你基于某种规则如简单轮询随机连接等去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。
2. LoadBalancer概述 LB负载均衡(Load Balance)是什么 简单的说就是将用户的请求平摊的分配到多个服务上从而达到系统的HA高可用常见的负载均衡有软件NginxLVS硬件 F5等
spring-cloud-starter-loadbalancer组件是什么
Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。相比较于RibbonSpringCloud LoadBalancer不仅能够支持RestTemplate还支持WebClientWeClient是Spring Web Flux中提供的功能可以实现响应式异步请求添加链接描述
3. 客户端负载与服务端负载区别
Nginx是服务器负载均衡客户端所有请求都会交给nginx然后由nginx实现转发请求即负载均衡是由服务端实现的。loadbalancer本地负载均衡在调用微服务接口时候会在注册中心上获取注册信息服务列表之后缓存到JVM本地从而在本地实现RPC远程服务调用技术
4. 负载均衡图示 LoadBalancer 在工作时分成两步 第一步先选择ConsulServer从服务端查询并拉取服务列表知道了它有多个服务(上图3个服务)这3个实现是完全一样的
默认轮询调用谁都可以正常执行。类似生活中求医挂号某个科室今日出诊的全部医生客户端你自己选一个。
第二步按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址所以LoadBalancer是一个客户端的负载均衡器。
5. 代码实现
仿照cloud-provider-payment8001建立cloud-provider-payment8002,cloud-provider-payment8003模拟3个服务
6. 测试 7. 使用 order80pom文件中加入如下内容 !--loadbalancer--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependencyOrderController中加入如下代码 GetMapping(value /consumer/pay/getConfigInfoByConsul)Operation(summary 测试查询consul配置信息,description 测试查询consul配置信息)public String getConfigInfoByConsul(){return restTemplate.getForObject(PaymentSrv_URL /pay/getConfigInfoByConsul, String.class);}轮询访问8001,8002,8003成功
8. 原理分析
使用DiscoveryClient动态获取所有上线的服务列表 简单模拟,在OrderController中使用DiscoveryClient获取服务列表
Resourceprivate DiscoveryClient discoveryClient;/*** LoadBalance原理* 使用DiscoveryClient获取服务列表* return*/GetMapping(/consumer/discovery)public String discovery() {ListString services discoveryClient.getServices();for (String element : services) {System.out.println(element);}System.out.println();ListServiceInstance instances discoveryClient.getInstances(cloud-payment-service);for (ServiceInstance element : instances) {System.out.println(element.getServiceId() \t element.getHost() \t element.getPort() \t element.getUri());}return instances.get(0).getServiceId() : instances.get(0).getPort();}