SpringCloud Netflix Ribbon 负载均衡

本文介绍了Spring Cloud Ribbon,一种实现客户端负载均衡的工具。通过实例演示了如何使用Ribbon进行服务间的负载均衡,并解释了其工作原理及与Nginx的区别。

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

1. Ribbon 是什么?

Spring Cloud Ribbon 是一套实现客户端负载均衡的工具。注意是客户端。负载均衡就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。

再说的通俗一点,就是可以在配置文件中列出 LB 后面所有的机器(即服务),Ribbon 会自动根据某种规则(如轮询、随机等等)去连接这些机器(即服务),我们也可以自定义一些负载均衡算法。

再简单点,Ribbon 就是一个类库,集成在服务消费方,消费方从服务注册中心获知有哪些地址(即服务)可用,然后消费方通过 Ribbon 从这些地址当中选择一个合适的服务器来消费服务。

图示:
在这里插入图片描述

2. Nginx 和 Ribbon的区别

Nginx 是服务器端负载均衡,体量比较大
Ribbon是客户端负载均衡,用于微服务之间的负载,轻便、体量小

3. Ribbon 的简单使用

3.1 我们定义两个订单服务

代码如下

@RestController
public class OrderService {

    @Value("${server.port}")
    private int port;

    @GetMapping("/orders")
    public String getAllOrder(){
        System.out.println("port"+port);
        return "Return all order";
    }
}

配置文件

# 应用名称
spring.application.name=order-service
# 应用服务 WEB 访问端口
server.port=8080

idea如图配置就可以开启两个一模一样的服务
在这里插入图片描述

3.2 我们定义一个用户服务

@RestController
public class UserController {
    @Autowired
    RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/user/{id}")
    public String findById(@PathVariable("id") int id){
        // TODO
        // 调用订单的服务去获取数据
        // Spring 中提供的远程通信
        ServiceInstance serviceInstance = loadBalancerClient.choose("order-service");

        String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/orders");
        return restTemplate.getForObject(url,String.class);
    }
}

引入ribbon的包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>

配置文件

# 应用名称
spring.application.name=user-service
# 应用服务 WEB 访问端口
server.port=8088

# 配置制定服务的提供者地址列表
order-service.ribbon.listOfServers=\
  localhost:8080,localhost:8082

接着启动三个服务,在浏览器中访问连接
在这里插入图片描述
接着看控制台,发现请求多次,轮流调用两个order服务,至此,你已经学会了ribbon的简单使用了。
在这里插入图片描述
在这里插入图片描述
第二种写法,使用注解的写法

@RestController
public class UserController {
    @Autowired
    RestTemplate restTemplate;

    @Bean
    @LoadBalanced    // 这里直接加一个注解,即可实现上述使用loadBalancerClient的功能
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/user/{id}")
    public String findById(@PathVariable("id") int id){
        return restTemplate.getForObject("http://order-service/orders",String.class);
    }
}

4. Ribbon的原理

ribbon的工作流程
1、解析配置中的服务器列表
2、基于负载均衡的算法来实现请求的分发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值