SpringCloud之Ribbon

本文详细介绍了如何利用SpringCloud的Ribbon进行分布式项目中的服务发现与负载均衡,包括注册中心的设计、服务提供者与消费者的实现,以及通过实际案例展示了Ribbon在容错和资源分配上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面学习了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值