如何使用Ribbon
大致步骤
- 导包
- 写配置
- 加注解
- 添加启动注解
详细步骤
步骤一:导包
-
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.6.RELEASE</version> </dependency>
-
与eureka的版本需要一致,其实就是将spring-cloud-starter-eureka修改成ribbon就可以了
步骤二:写配置
不用
步骤三:加注解
在config中添加@LoadBalanced
@Configuration
public class ConfigBean {
//先配置RestTemplate
//配置负载均衡实现RestTemplate
/*
AvailabilityFilteringRule:先过滤,跳闸,访问故障服务,对剩下的进行轮询
RandomRule 随机
RoundRobinRule轮询
RetryRule先轮询获取服务,若服务获取失败,则会在指定时间重试
*/
@Bean
@LoadBalanced//ribbon
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
步骤四:获取信息的地址变了,从服务名字获取
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
@RestController
public class DeptConsumerController {
//消费者不应该有service层
//RestTemplate模板中存在很多方法,供我们调用
@Autowired
RestTemplate restTemplate;//提供多种远程访问http服务,简单的restful服务
//private static final String REST_URL_PREFIX = "http://localhost:8001";
//通过服务名字访问
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
@RequestMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id){
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id,Dept.class);
}
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept){
return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add",dept,Boolean.class);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> list(){
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list",List.class);
}
}
步骤四:创建多个服务provider
- 创建完后分别绑定不同的数据库
- 全部注册到注册中心
步骤五:负载均衡
-
默认是轮询的负载均衡
-
想自定义的话
-
按以下结构建包
-
-
把自定义的写在myRule里
-
@Configuration public class MyRule { @Bean public IRule myRibbonRule(){ return new RandomRule(); } }
-
步骤六:加上启动注解
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT" ,configuration = MyRule.class)
总结:
- 导包ribbon
- 加@LoadBalance
- 从服务名字获取服务
- 自定义负载均衡的方法
- 启动注解【不加也行】
主要是从服务名字获取服务