springcloud(三) --负载均衡 Ribbon与 RestTemplate整合使用

本文详细介绍了Spring Cloud Ribbon,它是基于Netfix Ribbon的客户端负载均衡工具。Ribbon提供了一系列负载均衡策略,如轮询、随机等。通过@LoadBalanced注解的RestTemplate,可以方便地实现服务调用。此外,文章还讨论了如何自定义负载均衡策略,以适应特定的业务需求。最后,提到了Spring Cloud Ribbon在微服务架构中的应用和作用。
摘要由CSDN通过智能技术生成

Ribbon是什么

  • spring cloud Ribbon是基于Netfix Ribbon实现的一套客户端负载均衡的工具
  • Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。
  • Ribbon是Netflix发布的开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。

如图:
Ribbon实现原理

Ribbon能干嘛

  • LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。
  • 负载均衡就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。
  • 负载均衡简单分类:
    • 集中式LB
      • 即在服务的消费方和提供方之间使用独立的LB设备,如Nginx,由该设施负责把访问请求通过某种策略发至服务的提供方
    • 进程式LB
      • 将LB逻辑集成到消费方,消费方从服务注册中心获取有哪些地址可用,然后自己再从这些地址中选出合适的服务器。
      • Ribbon就属于进程式LB,它只是一个类库,集成于消费方进程,消费方通过它来获取服务提供方的地址。

使用 RestTemplate 与整合 Ribbon

在前面介绍 Eureka 时,我们已经使用过 RestTemplate 了。
springcloud(一)-环境搭建及多模块使用RestTemplate实现api调用

两者结合使用也非常简单。

首先我们创建一个消费者模块springcloud-consumer-user-80
导入ribbon依赖,

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

RestTemplate 负载均衡

编写配置类config:

@Configuration
public class ConfigBean {
   
    //spring框架提供的RestTemplate类可用于在应用中调用rest服务,
    // 它简化了与http服务的通信方式,统一了RESTful的标准,
    // 封装了http链接, 我们只需要传入url及返回值类型即可
    @Bean
    @LoadBalanced  //配置负载均衡
    public RestTemplate getRestTemplate(){
   
        return new RestTemplate();
    }
}

使用添加@LoadBalanced注解后的RestTemplate调用服务提供者的接口时,可以使用虚拟IP替代真实IP地址。所谓的虚拟IP就是服务提供者在application.properties或yml文件中配置的spring.application.name属性的值

@RestController
public class UserConsumerController {
   
    /*
    * 使用restTemplate访问restful接口非常的简单粗暴无脑。
    * (url, requestMap, ResponseBean.class)这三个参数分别代表
    * 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
     */
    @Autowired
    private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的restful服务模板

    //ribbon 我们这里的地址应该式一个变量,通过服务名来访问
   // private static final String REST_URL_PREFIX="http://localhost:8001";
    private static final String REST_URL_PREFIX="http://springcloud-provder-user";

    @RequestMapping("/consumer/user/get/{id}")
    public User get(@PathVariable("id")Long id){
   
     return restTemplate.getForObject(REST_URL_PREFIX+"/user/get/"+id, User.class);//注意get还是post
    }
    @RequestMapping("/consumer/user/add")
    public int addUser(User user){
   
        return restTemplate.postForObject(REST_URL_PREFIX+"/user/add",user,int.class);
    }
    @RequestMapping("/consumer/user/list"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值