您的位置:首页 > 编程语言 > Java开发

spring cloud学习(二)使用Ribbon实现客户端负载均衡

2017-02-13 18:52 483 查看

使用Ribbon实现客户端的负载均衡

* 个人博客空间 : https://zggdczfr.cn/ *

Ribbon

Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组件。

Ribbon的特点

和Eureka完美整合

支持多种协议-HTTP,TCP,UDP

缓存/批处理

built in failure resiliency

具体请查看官方文档 : https://github.com/Netflix/ribbon/wiki

整合Ribbon实现客户端的负载均衡

前期准备

这里用到了上次的两个demo(服务注册中心和服务提供者)。

首先,添加服务提供者的服务,这里我将其端口号打印出来能够更加直观地观察到负载均衡的实现:

@RestController
public class PrintfController {

@Value("${server.port}")
private String port;

@RequestMapping("/service")
public String printf(){
System.out.println("服务消费者正在使用服务,端口号为 : "+port);
return "success";
}
}


接下来分别启动这两个工程,注意将服务提供者的端口号(原来为1111改为1112)修改后再启动一次.就整个项目而言,总共有三个微服务再运行着(一个注册中心,两个服务提供者)。PS:其实服务提供者你想弄多少都行。

创建服务消费者

像一个普通的 spring cloud 工程一样,创建后向注册中心注册自己的信息。

添加依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>


添加消费调用接口:

这里涉及到一个类
LoadBalancerClient
,这个就是由 Netflix Ribbon 提供的工具类。他会根据 ServiceId (配置文件中的Service Name)向 Eureka (注册服务器)获取服务地址。

@RestController
public class ConsumerController {

@Autowired
private LoadBalancerClient client;

@RequestMapping("/test")
public String test(){
ServiceInstance instance = client.choose("service");
URI uri = instance.getUri();
System.out.println(uri);
return (new RestTemplate()).getForObject(uri+"/service",String.class);
}
}


配置文件信息:

# eureka client 配置
spring.application.name=ribbon-consumer
server.port=2222
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/


注意:
LoadBalancerClient
返回的是已经注册的服务器地址。

启动服务消费者

启动工程后,我们可以看到如下注册信息:



Ribbon 实现负载均衡

多次访问 http://localhost:2222/test ,并查看控制台信息:



这样子,就实现了客户端的负载均衡了~

参考资料:

Spring Cloud Netflix 官网文档-中文译本

Spring Cloud Netflix Ribbon

个人参考项目

个人参考项目 : https://github.com/FunriLy/springcloud-study/tree/master/%E6%A1%88%E4%BE%8B2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐