前面学习了IDEA之搭建SpringCloud项目,只是大概知道分布式的项目是什么搭建的。
分布式项目只是简单的将一个系统根据功能切割吗?
如果单个功能的服务器宕机了,那是不是只能等这个功能的服务重新启动?
如果我单个功能的服务器有多个,那不就可以在对应服务宕机的时候还能用吗?而且平时还可以分摊用户。
就好比你去银行柜台办理业务,有几个柜台能办理一样的业务,这个柜台人多,那就去其他的柜台
一、ribbon的作用
- 实现负载均衡
- 通过服务名称,消费者就能使用服务
二、设计
2.1 注册中心
这个只需要按照IDEA之搭建SpringCloud项目创建即可
2.2 服务提供者
这里为了体现负载均衡,我创建了两个服务提供者:
- 使用一样的服务名称
- 提供一样的接口去请求同一数据库数据
2.3 服务消费者
- 将RestTemplate交给Spring容器管理,同时通过注解整合Ribbon使RestTemplate具备负载均衡
@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {
@Bean
@LoadBalanced//添加LoadBalanced注解来整合Ribbon使其具有负载均衡的能力
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- RestTemplate通过服务名称去调用对应的服务
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private RestTemplate restTemplate;//使用restTemplate请求User服务
private static final String REST_URL_PREFIX ="http://SERVICE-PROVIDER-USER";
@RequestMapping("/findAll")
@ResponseBody
public List<UserBean> queryAll() {
String url = REST_URL_PREFIX+"/user/findAll";
UserBean[] userBeans = restTemplate.getForObject(url,UserBean[].class);
return Arrays.asList(userBeans);
}
}
三、测试
将服务提供者(UserService-Provider1、UserService-Provider2)、服务消费者(UserService-Customer)注册到注册中心
通过服务消费者发起请求,系统调用了UserService-Provider1的接口
再次发起请求,系统调用了UserService-Provider2的接口