Springcloud负载均衡Ribbon
Spring Cloud Ribbon 是一个客户端负载均衡器,且并不是单独进行部署的。Ribbon实现负载均衡有三个要素,服务发现、服务选择规则、服务监听。
一、Ribbon使用
1. 客户端负载均衡
负载均衡主要的功能就是缓解网络压力,实现系统的高可用。
在系统中,一般分为服务端负载均衡和客户端负载均衡。
- 服务端负载均衡,存在代理对服务端的列表进行选择,并返回一个请求给客户端。
- 客户端负载均衡时,把列表全部给客户端,代理相当于在客户端,均衡的操作逻辑在客户端完成。
Ribbon实现客户端负载均衡,请求列表维护在客户端,然后通过一定的规则,在列表中选择请求进行访问,最后达到负载均衡的效果。
2. Ribbon实例
本此实例的代码在上一篇文章中。
Springcloud服务治理EureKa。服务注册中心与客户端
-
首先启动一个服务注册中心
application.ymlserver: port: 8080 spring: application: name: eurekaApplication1 eureka: client: service-url: defaultZone: http://localhost:8080/eureka/ register-with-eureka: false
服务注册中心端口8080
-
启动两个服务提供者
首先启动一个应用
application.ymlserver: port: 8083 spring: application: name: providerService eureka: client: service-url: defaultZone: http://localhost:8080/eureka/
修改端口,重新启动一个
application.ymlserver: port: 8084 spring: application: name: providerService eureka: client: service-url: defaultZone: http://localhost:8080/eureka/
@RestController public class MyController { @Autowired private DiscoveryClient client; @Qualifier("eurekaRegistration") @Autowired private Registration registration; //服务注册 private final Logger logger = LoggerFactory.getLogger(MyController.class); @GetMapping("/hello") public String hello() { ServiceInstance instance = serviceInstance(); String result = "host:port=" + instance.getUri() + ", service_id" + instance.getServiceId(); logger.info(result); return "hello eureka"; } private ServiceInstance serviceInstance() { List<ServiceInstance> list = client.getInstances(registration.getServiceId()); if (list != null && list.size() > 0) { for (ServiceInstance itm : list) { if (itm.getPort() == 8083) { return itm; } } } return null; } }
-
启动一个服务消费者
@RestController public class ConsumerController { @Autowired RestTemplate restTemplate; /** * restTemplate 调用 * @return */ @GetMapping("/consumer") public String consumer(