油盐微服务——负载均衡Ribbon

2023-11-08


Spring Cloud Ribbon 是一个基于http和tcp的客户端 负载均衡工具,它 不需要像服务注册中心那样 独立部署,它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。
微服务之间的调用,API网关的请求转发等内容实际上是通过Ribbon来实现的。

客户端负载均衡

客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端的清单来自于服务注册中心。

客户端负载均衡于服务器端负载均衡的不同在于:服务清单所存储的位置。比如nginx的清单,明显就不存储在客户端上。


微服务架构中,客户端负载均衡调用非常的简单:

  • 服务提供者只需要启动多个服务实例并注册到服务注册中心(或者注册中心集群)。
  • 服务消费者只需要调用被@LoadBalanced 注解修饰过的RestTemplate来实现面向服务的接口调用即可。

RestTemplate详解

Restemplate对象会使用Ribbon自动化配置,同时通过配置@LoadBalanced开启客户端负载均衡。

下面介绍RestTemplate几种不同请求类型和参数类型的服务调用实现。
GET请求
在RestTemplate中,对GET请求可以通过如下两个方法调用实现。
getForEntity函数。该方法返回的是ResponseEntity,该对象是Spring对Http请求信息相应的封装(比如HttpStatus(也就是404、500等))。

public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables){}
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables){}
public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType){}

ResponseEntity.java

public HttpStatus getStatusCode(){}
public int getStatusCodeValue(){}
public boolean equals(@Nullable Object other) {}
public String toString() {}
public static BodyBuilder status(HttpStatus status) {}
public static BodyBuilder ok() {}
public static <T> ResponseEntity<T> ok(T body) {}
public static BodyBuilder created(URI location) {}

HttpStatus.java

public enum HttpStatus {
public boolean is1xxInformational() {}
public boolean is2xxSuccessful() {}
public boolean is3xxRedirection() {}
public boolean is4xxClientError() {}
public boolean is5xxServerError() {}
public boolean isError() {}
}

BodyBuilder.java

public interface BodyBuilder extends HeadersBuilder<BodyBuilder> {
    //设置正文的长度,以字节为单位,由Content-Length标头
      BodyBuilder contentLength(long contentLength);
    //设置body的MediaType 类型
      BodyBuilder contentType(MediaType contentType);
    //设置响应实体的主体并返回它。
      <T> ResponseEntity<T> body(@Nullable T body);

可以看出来,ResponseEntity包含了HttpStatus和BodyBuilder的这些信息,这更方便我们处理response原生的东西。

RestTemplate restTemplate=new RestTemplate();
ResponseEntity<String> responseEntity=restTemplate.getForEntity(uri,String.class);
String body=responseEntity.getBody();

如果返回的是User对象类型:

RestTemplate restTemplate=new RestTemplate();
ResponseEntity<User> responseEntity=restTemplate.getForEntity(uri,User.class);
User body=responseEntity.getBody();

getForObject函数。该方法可以理解为对getForEntity的进一步封装。比如:

 	RestTemplate restTemplate=new RestTemplate();
 	String result=restTemplate.getForObject(uri,String.class);

当返回的body是一个User对象时,可以直接这样实现:

 	RestTemplate restTemplate=new RestTemplate();
 	User result=restTemplate.getForObject(uri,User.class);

Post请求
postForEntity函数和postForObject函数,这两种和上面介绍的get请求的类似不做赘述,直接看代码:

RestTemplate restTemplate =new RestTemplate();
User user=new User("didi",20);
String postResult=restTemplate.postForObject("http://user-service/user",user,String.class);

post还有postForLocation函数,该方法实现了以Post请求提交资源,并返回新资源的URI。

RestTemplate restTemplate =new RestTemplate();
User user=new User("didi",20);
URI responseURI=restTemplate.postForLocation("http://user-service/user",user);

put请求
delete请求
不做赘述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

油盐微服务——负载均衡Ribbon 的相关文章

  • Spring Cloud微服务项目实战笔记(二)是什么推动了单体应用到微服务架构的演进?

    首先对比的是单体应用 一个有问题 大家都完蛋 重新回滚到上一版本 开发测试沟通成本也大 微服务架构的优势 每个微服务是一个小的完整单位 独立的代码库数据库 自己去快速迭代功能 快速迭代 快速回滚 资源利用大大提高 大幅降低协作成本 高可用
  • springcloud常见面试题(2023最新)

    目录 前言 一 微服务 1 微服务是什么 2 你知道哪些RPC框架 3 springCloud和Dubbo有什么区别 4 SpringCloud由什么组成 二 Spring Cloud Eureka 1 Eureka包含几个组件 2 Eur
  • 一直在说高并发,多少QPS才算高并发?

    高并发的四个角度 只说并发不提高可用就是耍流氓 可以从四个角度讨论这个问题 首先是无状态前端机器不足以承载请求流量 需要进行水平扩展 一般QPS是千级 然后是关系型数据库无法承载读取或写入峰值 需要数据库横向扩展或引入nosql 一般是千到
  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • 从零开始实现基于go-zero框架的微服务电商项目(二)——User服务的基础搭建

    从零开始实现基于go zero框架的微服务电商项目 二 User服务的基础搭建 项目地址 liuxianloveqiqi XianShop 使用go zero搭建的电商项目 github com API 首先在api包下新建user api
  • 【微服务】一张图搞懂微服务架构设计

    一张图搞懂微服务架构设计 1 前言 2 流量入口 Nginx 3 网关 4 业务组件 5 服务注册中心 6 缓存和分布式锁 7 数据持久层 8 结构型数据存储 9 消息中间件 10 日志收集 11 任务调度中心 12 分布式对象存储 1 前
  • jenkins部署微服务项目

    新手上路 对着视频做了一个谷粒的在线教育项目 测试跑通之后 想要自己试着部署到自己的云服务器上 闲着也是闲着不是 言归正传 简介 在微服务架构中 随着服务越来越多 服务的打包部署就会成为一个相当麻烦的事情 比如说我的edu online项目
  • 基于SpringBoot-Dubbo的微服务快速开发框架

    简介 基于Dubbo的分布式 微服务基础框架 为前端提供脚手架开发服务 结合前一篇 Web AP快速开发基础框架 可快速上手基于Dubbo的分布式服务开发 项目代码 https github com backkoms web service
  • springcloud集成apollo

    apollo 配置中心 官网 Apollo 官网有设计 部署说明 系统架构图 github开源官网https github com apolloconfig apollo releases releases上下载后发现有这4个文件 apol
  • Dubbo快速入门

    文章目录 一 初识Dubbo 1 Dubbo是什么 2 Dubbo现状 3 Dubbo的故事 主要历程 二 RPC介绍 三 Dubbo工作原理 四 案例实操 项目编写 1 项目创建 2 服务提供者 producer 的开发 3 服务消费方
  • 为分布式做准备吧——分布式服务架构设计概述

    文章目录 分布式服务框架设计架构原理 通信框架 长连接还是短链接 BIO还是NIO 序列化与反序列化 协议栈 服务路由 基于服务注册中心的订阅发布 集群容错 服务降级 分布式消息跟踪 分布式服务框架设计架构原理 通常 分布式服务框架的架构可
  • 微服务项目之项目简介

    目录 项目模式 技术栈 项目架构图 模块 主模块 项目模式 电商模式 市面上有5种常见的电商模式 B2B B2C C2B C2C O2O 1 B2B模式 B2B Business to Business 是指 商家与商家建立的商业关系 如
  • 如果老板要求你的系统接入春晚大流量活动,你会心慌慌吗?

    目录 回头看看 原始系统技术架构 基于CDN的活动静态页面缓存方案 基于Nginx Tomcat Redis的多级缓存方案 超高并发写请求RocketMQ削峰填谷方案 系统限流防雪崩体系架构方案 今天给大家分享一个话题 就是如果要是你老板突
  • 一文打通Sleuth+Zipkin 服务链路追踪

    1 为什么用 微服务架构是一个分布式架构 它按业务划分服务单元 一个分布式系统往往有很多个服务单元 由于服务单元数量众多 业务的复杂性 如果出现了错误和异常 很难去定位 主要体现在 一个请求可能需要调用很多个服务 而内部服务的调用复杂性 决
  • SpringCloud概述

    SpringCloud概述 1 SpringCloud是什么 2 SpringCloud和SpringBoot关系 3 Dubbo和SpringCloud技术选型 4 SpringCloud作用 1 SpringCloud是什么 现代化的J
  • SpringBoot启动微服务报错Consider defining a bean of type ‘org.springframework.data.redis.core.RedisTemplate

    最近遇到一个问题 项目之前使用了Redis 可正常启动 然后最近对Redis部分进行了一些微调 再启动服务提示如下错误 Consider defining a bean of type org springframework data re
  • spring security oauth2 动态切换角色或者岗位,更新redis缓存

    1 切换角色或者岗位后更新缓存token 获取token 并更新token 特别要注意token中的内容 accessToken getAdditionalInformation put SecurityConstants DETAILS
  • 若依微服务版本代码生成对sqlserver的支持

    目录 前言 一 后端 1 pom依赖 2 yml配置配置数据源 3 新增service impl 注意 4 新增mapper接口
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • DockerCompose - 微服务项目部署全过程(最佳实践)

    目录 一 微服务项目部署 1 1 项目介绍 1 2 准备 MySQL 初始化文件 1 3 pom xml 插件 1 4 测试工作 1 5 编写 Dockerflie 文件 1 6 编写 DockerCompose yml 文件 1 7 修改

随机推荐

  • 论文笔记:MEASURING DISENTANGLEMENT: A REVIEW OF METRICS

    0 摘要 学习解缠和表示数据中的变化因素是人工智能中的一个重要问题 虽然已经取得了许多关于学习这些表示的进展 但如何量化解缠仍然不清楚 虽然存在一些度量标准 但对它们的隐含假设 真正衡量的内容以及限制了解甚少 因此 当比较不同的表示时 很难
  • 基于深度强化学习的柔性作业车间动态调度

    文献来源 International Journal of Production Research 2022 南洋理工大学 IJPR 2022 Full article Deep reinforcement learning for dyn
  • JPS命令的安装和使用

    一 简介 jps Java Virtual Machine Process Status Tool 是JDK 1 5提供的一个显示当前所有java进程pid的命令 简单实用 非常适合在linux unix平台上简单察看当前java进程的一些
  • android NDK编译openblas和向量检索库faiss

    设置android SDK和NDK路径 例如 export SDK ROOT root codes my sdk sdk export NDK ROOT root codes my sdk sdk ndk 24 0 8215888 sdk和
  • 自制带串口的J-Link OB 072

    自制带串口的J Link OB 072 普通的三线J link不带串口 使用起来比较麻烦 于是找资料自制了一个J Link OB 072 主芯片是stm32f072c8t6 带串口 使用方便 先上图 自带信仰加持 一遍调通 急急如律令 依然
  • vue 高德地图添加放大缩小地图、转盘工具

    新建文件 amap vue
  • Guided Diffusion/Diffusion Models Beat GANs on Image Synthesis (Paper reading)

    Guided Diffusion Diffusion Models Beat GANs on Image Synthesis Paper reading Prafulla Dhariwal OpenAI NeurlPS2021 Cited
  • JavaScript——大数组的合并问题及不同数组合并方法的探究

    JavaScript 大数组的合并问题及不同数组合并方法的探究 最近在处理模型数据的时候出现了一个问题 当合并不同模型的vertex等数据的时候 从网上查了查都说Array prototype push 这个好 结果我使用了这个方法却报错了
  • VUE的项目中怎样修改浏览器窗口的 LOGO

    vue项目如何修改上图浏览器的标题栏的图标 在public目录中的index html添加如下代码 注意logo svg是图片 图片位置在public目录下
  • 【直接收藏】前端 VUE 高阶面试题(一)

    1 说说vue动态权限绑定渲染列表 权限列表渲染 首先请求服务器 获取当前用户的权限数据 比如请求 this http get rights list 获取到权限数据之后 在列表中使用v if v if else的组合来展示不同的内容
  • 性能测试常见问题分析

    性能测试常见问题分析 1 请你个人描述一下性能测试的意义和作用 说出因性能不良造成的质量事故 2 如何进行性能测试 请说出整体的性能测试流程 a 分析测试范围 测试对象 如频繁使用的功能 频繁调用的接口 大量数据库读写操作多的功能 大量读写
  • 信息组织川大972

    网络信息组织 1 网络信息环境 1 1 网络发展的三个阶段 2 语义网信息组织 2 1 万维网与语义网 2 2 语义网技术架构 2 3 本体 2 4 关联数据 2 5 网站信息架构 3 Web2 0信息组织方法 3 1 标签法 3 2 Wi
  • 多元Huffman编码问题

    题目链接 题意 最多可以让k堆合并 每一次合并的花费为河合并堆的数量 问最多和最少的花费 题解 最少的花费一定是每次合并的堆数尽可能多 这样我们就会减少前面已经合并的堆的重复计算 所以 每次合并k堆时最少 每次合并2堆时最大 另外 最少的时
  • [WTL] STLport安装指南

    STLport安装指南STLport 4 6 是完全兼容ANSI C 标准的类库 This distribution contains STLport sources only no binaries To use STLport iost
  • Word文件删除后怎么恢复?好用的恢复方法分享

    Word文件删除后怎么恢复 在工作和学习的过程中 我们难免会遇到丢失数据的情况 比如有时候不小心删除了Word文件 或者Word文件在操作过程中意外卡顿导致丢失 有什么好方法恢复呢 下面就一起来了解下 遇到Word文件数据丢失不要慌张 首先
  • Java项目的开发流程

    一个java开发项目过程 1 项目启动 1 项目组成立 公司成员 客户成员 2 制定项目预期目标 3 制定项目计划周期 4 建立好项目组成员沟通机制 2 需求调研 1 创建调研计划 协调调研时间 2 收集客户资料 获取客户需求 所有的资料都
  • Redis缓存雪崩、穿透、击穿原因分析和解决方案,附Redis管道使用技巧

    先给大家附上其他几篇文章 感兴趣的自行开车导航 Redis过期策略和持久化机制全面揭秘 教你如何合理配置 深入浅出Redis 一 从版本特性到数据类型到线程模型 带你了解Redis的核心特性和应用场景 一次redis OOM问题分析解决 r
  • 阿里云ECS漏洞修复简单办法

    阿里云的安全检测功能会每天检测主机上的漏洞 然后短信推送 让你试用漏洞修复功能 或购买修复功能 其实不需要购买 在主机上执行 apt upgrade 或者 yum upgrade 就自动修复了 其实就是更新软件包 更新内核 然后重启就可以了
  • LeetCode-738

    738 单调递增的数字 给定一个非负整数 N 找出小于或等于 N 的最大的整数 同时这个整数需要满足其各个位数上的数字是单调递增 当且仅当每个相邻位数上的数字 x 和 y 满足 x lt y 时 我们称这个整数是单调递增的 Example
  • 油盐微服务——负载均衡Ribbon

    文章目录 客户端负载均衡 RestTemplate详解 Spring Cloud Ribbon 是一个基于http和tcp的客户端 负载均衡工具 它 不需要像服务注册中心那样 独立部署 它几乎存在于每一个Spring Cloud构建的微服务