目录
Ribbon
Ribbon主要负责负载均衡调用,是基于Netflix Ribbon实现的一套客户端。主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon会自动的帮助你基于某种规则去连这些机器。
简单来说 ribbon = 负载均衡 + restTemplate
一、Ribbon本地负载均衡 与 Nginx服务端负载均衡 区别
Nginx是服务器负载均衡,集中式负载均衡,客户端的所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
Ribbon本地负载均衡,进行内负载均衡,在调用为服务接口的时候,会在注册中心上获取信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。
二、Ribbon工作步骤
Ribbon在工作时分成两步:
- 第一步先选择EurekaServer,它优先选择在同一个区域内负载较少的server
- 第二部再根据用户指定的策略,从server取到的服务注册列表中选择一个地址。
Ribbon就是一个软负载均衡的客户端组件,它可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。
三、Ribbon调用服务
3.1、设置服务端集群:
eureka-client、eureka-client2
eureka-client2就是 eureka-client的复制版,注意端口号要更改。
在eureka-client中编写controller,用于服务调用测试。
@RestController
public class ClientController {
@Value("${server.port}")
private String port;
@ResponseBody
@RequestMapping("/port")
public String getPort(){
return port;
}
}
3.2、客户端
3.2.1、编写配置类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
3.2.2、编写controller
@RestController
public class ConsumerController {
@Resource
private RestTemplate restTemplate;
private static final String URL = "http://EUREKA-CLIENT";
@RequestMapping("/consumer/port")
@ResponseBody
public String getPort() {
return restTemplate.getForObject(URL + "/port", String.class);
}
}
4、测试
启动eureka-server、eureka-client、eureka-client2、eureka-consumer。
访问localhost:8001/port进行自测。
访问localhost:8002/port进行自测。
自测成功后,不停访问localhost:7001/consumer/port。
发现端口号会变更,说明Ribbon负载均衡已生效。