Spring Cloud的负载均衡Ribbon

RestTemplate简介

RestTemplate是Spring Resources中一个访问第三方RestFul api接口的网络请求框架。RestTemplate 的设计原则和其他Spring Template(例如JdbcTemplate、JmsTemplate)类似,都是为执行复杂任务提供了一个具有默认行为的简单方法。

RestTemplate是用来消费REST服务的,所以RestTemplate的主要方法都与REST的Http协议的一些方法紧密相连,例如HEAD、GET、POST、PUT、DELETE、OPTIONS等方法,这些方法在RestTemplate类对应的方法为headForHeaders()、getForObject()、postForObject()、put()、delete()等。

maven依赖:

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>

    <version>2.0.1.RELEASE</version>

</dependency>

service层使用:

@Bean

@LoadBalanced

RestTemplate restTemplate(){

   return new RestTemplate();

}

@Autowired

private RestTemplate restTemplate;

User user = restTemplate.getForObject("http://localhost.8672/getUser",User.class);

RestTemplate的使用很简单,它支持xml、json数据格式,默认实现序列化,可以自动将JSON字符串转化为实体,如上代码,可以将返回的json字符串转换成User对象。

负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式,一种是独立进行单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如Ngnix。另一种是将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了列表,通过负载均衡策略将请求分摊到多个服务提供者,从而达到负载均衡的目的。

LoadBalancerClient简介

负载均衡的核心类是LoadBalancerClient,它可以获取负载均衡的服务提供者的实例信息。比如注册一个服务client,这个服务client监听2个端口8763/8764,那么在Eureka server上会注册2个实例,当你使用负载均衡的时候,LoadBalancerClient的choose("client")方法可以轮流得到client的两个服务实例的信息,交替请求这两个服务。

LoadBalancerClient接口继承了ServiceInstanceChooser,RibbonLoadBalancerClient实现了LoadBalancerClient,RibbonLoadBalancerClient是非常重要的类,最终的负载均衡请求处理由它来执行。choose()方法用于选择具体服务实例。choose()方法通过getServer()方法获取实例,经过源码跟踪最终通过ILoadBalancer类去选择实例。

IRule有很多具体的实现类,这些根据不同的算法和逻辑来处理负载均衡的策略。

IPing用于向server发送"ping",来判断该server是否有响应,从而判断server是否可用,它有一个isAlive()方法。

EurekaClient的实现类DiscoveryClient,DiscoveryClient具有服务注册、获取服务注册列表等功能。

Ribbon的使用,这里使用了@LoadBalanced负载均衡。

Ribbon结合RestTemplate

controller

application.yml

猜你喜欢

转载自blog.csdn.net/u012373281/article/details/86506861