SpringCloud之Ribbon

前面学习了IDEA之搭建SpringCloud项目,只是大概知道分布式的项目是什么搭建的。
分布式项目只是简单的将一个系统根据功能切割吗?
如果单个功能的服务器宕机了,那是不是只能等这个功能的服务重新启动?
在这里插入图片描述
如果我单个功能的服务器有多个,那不就可以在对应服务宕机的时候还能用吗?而且平时还可以分摊用户。

就好比你去银行柜台办理业务,有几个柜台能办理一样的业务,这个柜台人多,那就去其他的柜台

在这里插入图片描述

一、ribbon的作用

  • 实现负载均衡
  • 通过服务名称,消费者就能使用服务

二、设计

2.1 注册中心

这个只需要按照IDEA之搭建SpringCloud项目创建即可

2.2 服务提供者

这里为了体现负载均衡,我创建了两个服务提供者:

  1. 使用一样的服务名称
  2. 提供一样的接口去请求同一数据库数据

2.3 服务消费者

  1. 将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);
    }

}
  1. 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的接口
在这里插入图片描述

四、源码

SpringCloud整合RibbonDemo


版权声明:本文为jc_hook原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。