前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云原生】springcloud08——Ribbon负载均衡调用

【云原生】springcloud08——Ribbon负载均衡调用

作者头像
用户10127530
发布2022-10-26 19:20:15
3640
发布2022-10-26 19:20:15
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈

?

?

前 言 ? 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ?专栏简介:深入、全面、系统的介绍springcloud与springcloud Alibaba微服务常用技术栈 ? 文章简介:本文将介绍Ribbon负载均衡调用,建议收藏备用,创作不易,敬请三连哦 ?文章推荐: 微服务架构与springcloud 01——微服务入门 微服务架构与springcloud02——父工程构建及支付模块实现 微服务架构与springcloud03——项目热部署与消费者订单模块 微服务架构与springcloud04——Eureka服务注册与发现 springcloud05——Zookeeper实现支付微服务 【云原生】springcloud06——订单服务注册zookeeper 【云原生】springcloud07—Consul的服务注册与发现 大厂面试真题|面经

文章目录

1.Ribbon介绍

这篇文章我们讲介绍负载均衡调用组件:Ribbon。

1.1 Ribbon简介

? Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。

组件官网:https://github.com/Netflix/ribbon

项目状态:维护ing,但是它很优秀,还没有很成熟的替代方案。

未来可能被Loadblancer替代。

1.2 Ribbon应用场景

Ribbon主要应用于负载均衡,配合RestTemplate实现RPC的远程调用。

2.环境准备

先恢复下Eureka集群环境。如下图,依次启动Eureka服务器7001,7002,支付微服务8001,8002,订单微服务80。

测试下,http://localhost:7001/

http://localhost:7002/

3 Ribbon的负载均衡与Rest调用

3.1 工作原理

下图描述了Ribbon配合Eureka实现负载均衡的架构。

其工作原理如下。

3.2 Ribbon依赖引入

我们之前已经知道,我们访问订单微服务提供的接口时,其实已经采用轮询机制调用支付微服务端口8001,8002了

但是我们可用在订单微服务80的pom文件中查找下,并引入没有ribbon的依赖。

实际上,这是因为我们引入netflix-eureka了,已经整合了ribbon。

代码语言:javascript
复制
 <!-- eureka-client -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

不信您可用按住ctrl点进去看。

代码语言:javascript
复制
 <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
      <version>2.2.1.RELEASE</version>
      <scope>compile</scope>
 </dependency>

当然,你也可以自己加或者在和其它组件配合时使用,可以自己引入依赖。

3.3 RestTemplate

@LoadBalanced注解给RestTemplate开启负载均衡的能力。

官方文档:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

他的get请求有getForObject,getForEntity两种方法,前者可以理解返回json,后者包含响应一些重要信息:响应头、响应状态码、响应头等。post与get类似。

getForObject已经用过了,所以只测试getForEntity方法。

代码语言:javascript
复制
  @GetMapping("payment/getForEntity/{id}")
    public CommonResult getPaymentById2(@PathVariable("id")Long id){
        ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
        if(entity.getStatusCode().is2xxSuccessful()) {
            return entity.getBody();
        } else {
            return new CommonResult(444, "操作失败");
        }
    }

entity还可以返回更多其他信息,比如头信息等,你可以自己看看其api摸索摸索自定义。

推荐使用object方式,因为返回json串是主流方式。

3.4 默认的负载均衡规则

ribbon的默认负载规则有七种。

解释如下。

如何替换呢?先看看官网的这个提醒

?Ribbon的自定义配置类不可以放在@ComponentScan所扫描的当前包下以及子包下,否则这个自定义配置类就会被所有的Ribbon客户端共享,达不到为指定的Ribbon定制配置,而@SpringBootApplication注解里就有@ComponentScan注解,所以不可以放在主启动类所在的包下。(因为Ribbon是客户端(消费者)这边的,所以Ribbon的自定义配置类是在客户端(消费者)添加,不需要在提供者或注册中心添加)

为了让所有小兄弟都能够理解,我这边稍微解释下。点进主启动类.

点进SpringBootApplication,看到ComponentScan了么。

那就是说,Ribbon的配置类不可以放在com.wangzhou.springcloud这个包下了,而是需要另起炉灶。再新建一个myrule包。

自定义规则配置类。

代码语言:javascript
复制
@Configuration
public class MyselfRule {

    @Bean
    public IRule myRule() {
        return new RandomRule();
    }
}

在主启动类上添加@RibbonClient(name = “CLOUD-PAYMENT-SERVICE”, configuration = MyselfRule.class)name为指定的服务名(服务名必须与注册中心显示的服务名大小写一致)configuration为指定服务使用自定义配置(自定义负载均衡机制)

测试:浏览器输入http://localhost/consumer/payment/get/1,多次刷新实现负载均衡为随机。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.Ribbon介绍
    • 1.1 Ribbon简介
      • 1.2 Ribbon应用场景
      • 2.环境准备
      • 3 Ribbon的负载均衡与Rest调用
        • 3.1 工作原理
          • 3.2 Ribbon依赖引入
            • 3.3 RestTemplate
              • 3.4 默认的负载均衡规则
              相关产品与服务
              负载均衡
              负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com