天天看点

带你玩转 springCloud - 第5篇ribbon

作者:不开心就撸代码

一、什么是ribbon

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

二、修改80服务

1.修改pom文件

添加eureka、ribbon依赖

<!--eureka依赖-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--ribbon依赖-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>           

2.修改yml文件

将80服务加入到eureka注册中心

#eureka配置
eureka:
 client:
 service-url:
 defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002:/eureka
 #表示是否将自己注册进EurekaServer默认为true。
 register-with-eureka: true
 #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
 fetch-registry: true
 instance:
 #主机名称:服务名称修改
 instance-id: cloud-dept80
 #访问路径可以显示IP地址
 prefer-ip-address: true           

3.修改RestConfig添加注解

@LoadBalanced

@Configuration
public class RestConfig {

 @Bean
 @LoadBalanced //负载
 public RestTemplate getRestTemplate(){
 return new RestTemplate();
 }
}           

4.修改主启动类

@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer80_App {

 public static void main(String[] args) {
 SpringApplication.run(DeptConsumer80_App.class,args);
 }
}           

5.修改controller类

@RestController
public class DeptController {
不在采用ip地址的方式访问,而是通过eureka的注册名称来进行访问
// public static final String REST_URL_PREFIX = "http://localhost:8001";
 public static final String REST_URL_PREFIX = "http://CLOUD-DEPT";

 @Autowired
 private RestTemplate restTemplate;

 @GetMapping("/getById/{id}")
 public Dept getById(@PathVariable Long id){
 return restTemplate.getForObject(REST_URL_PREFIX+"/dept/getById/"+id,Dept.class);
 }

 @GetMapping("/getAll")
 public List<Dept> getById(){
 return restTemplate.getForObject(REST_URL_PREFIX+"/dept/getAll",List.class);
 }

 @PostMapping("/addDepy")
 public boolean getById(@RequestBody Dept dept){
 return restTemplate.postForObject(REST_URL_PREFIX+"/dept/addDept",dept,boolean.class);
 }
}           

三、如何测试

1.复制8001服务 8002,8003

2.启动eureka集群7001,7002,7003,启动8001,8002,8003服务,最后启动80服务

3.访问80服务,默认或轮询请求8001,8002,8003