SpringCloud Ribbon原理-1-LoadBalanced注解原理

本文探讨了SpringCloud Ribbon的客户端负载均衡原理,详细解释了如何通过LoadBalancerClient及@LoadBalanced注解实现服务调用的负载均衡。通过实例展示了如何创建服务提供者集群,并在服务消费者中配置服务地址列表。@LoadBalanced注解实际上是@Qualifier的一个变种,其作用在于标记Bean以实现负载均衡功能,使得请求在调用时能够自动选择服务提供者节点。
摘要由CSDN通过智能技术生成

SpringCloud Ribbon 客户端负载均衡原理

1. Ribbon实现负载均衡

相比于nginx, nginx是在服务端进行赋值均衡,由nginx服务器通过负载均衡算法获取到某个服务提供者的节点后,再将请求转发到该节点,而ribbon是在客户端进行负载均衡,也就是服务的调用方,获取到服务的提供者的地址列表,通过某种负载均衡算法,选择其中一个服务提供者节点进行服务调用, 下面通过两个项目来学习Ribbon 负载均衡的实现以及原理;

  • Ribbon实现负载均衡的两种方式

通过LoadBalancerClient 实现负载均衡
通过@LoadBalanced注解实现负载均衡

  1. 创建两个项目order-service user-service,一个作为服务提供者,一个作为服务消费者
    服务提供者order-service:
    在这里插入图片描述
    配置文件application.properties文件中配置端口号: server.port=8080 ,启动服务,然后修改端口号为8082,再启动一个服务,这样就得到了一个服务提供者的集群
    服务消费者user-service:
    在这里插入图片描述
package com.gupaoedu.springcloud.example.springclouduserservice;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class UserController {
   

    @Autowired
    RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
   
        return restTemplateBuilder.build();
    }
    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/user/{id}")
    public String findById(@PathVariable("id")int id){
   
        //TODO
        // 调用订单的服务获得订单信息
        // HttpClient  RestTemplate  OkHttp   JDK HttpUrlConnection
        ServiceInstance serviceInstance=loadBalancerClient.choose("spring-cloud-order-service");
        String url=String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/orders");
        return restTemplate.getForObject(url,String.class);
    }
}

配置文件: 指定服务消费者端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值