SpringCloud微服务:Ribbon和Feign组件,实现服务调用的负载均衡
一、Ribbon简介
1、基本概念
Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制。
2、负载均衡简介
目前主流的负载均衡方案可分成两类:
1)集中式
即在服务的消费方和提供方之间使用独立的LB设施,可以是硬件,如F5,也可以是软件,如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方;
2)进程内
将LB逻辑集成到消费方,消费方从服务注册中心获取可用服务列表,然后根据指定负载均衡策略选择合适的服务器。Ribbon就属于该方式。
3、Ribbon负载策略
1) RoundRobinRule 轮询
轮询服务列表List<Server>的index,选择index对应位置的服务。
2) RandomRule 随机
随机服务列表List<Server>的index,选择index对应位置的服务。
3) RetryRule 重试
指定时间内,重试(请求)某个服务不成功达到指定次数,则不再请求该服务。
二、Feign简介
1、基本概念
Feign 是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 接口类注解。
2、执行流程
- 主程序入口添加 @EnableFeignClients 注解开启对 FeignClient 接口扫描加载。接口使用@FeignClient注解。
- 调用Feign 接口中的方法被时,通过JDK的代理的方式,生成具体的 RequestTemplate。
- RequestTemplate 生成 Request请求,结合Ribbon实现服务调用负载均衡策略。
三、综合使用案例
1、项目结构图
1)、模块描述
Eureka注册中心
node02-eureka-7001
两个服务提供方
node02-provider-6001
node02-provider-6002
Ribbon服务调用
node02-consume-8001
Feign服务调用
node02-consume-8002
2)、依赖Eureka知识
上篇文章Eureka使用:
2、Ribbon服务调用
代码所属模块:node02-consume-8001
1)、核心依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
2)、配置文件
@Configuration
public class LoadConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate (){return new RestTemplate() ;}@Beanpublic IRule getIRule (){// 默认轮询算法// return new RoundRobinRule() ;// 重试算法:默认情况,访问某个服务连续三次失败,就不会再访问// return new RetryRule() ;// 随机算法return new RandomRule() ;}
}
3)、调用方式
@RestController
public class ConsumeController {@Autowiredprivate RestTemplate restTemplate ;String server_name = "http://NODE02-PROVIDER" ;// http://localhost:8001/showInfo@RequestMapping("/showInfo")public String showInfo (){return restTemplate.getForObject(server_name+"/getInfo",String.class) ;}}
这里的NODE02-PROVIDER就是服务提供方的配置文件。两个服务提供方的这块配置相同,Ribbon正基于此,实现多个服务调用的负载均衡。
spring:application:name: node02-provider
4)、提供方接口
@RequestMapping("/getInfo")
public String getInfo (){LOG.info("provider-6002");return "success" ;
}
3、Feign服务调用
代码所属模块:node02-consume-8002
1)、核心依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2)、配置文件
@FeignClient(value = "NODE02-PROVIDER")
public interface GetAuthorService {@RequestMapping(value = "/getAuthorInfo/{authorId}",method = RequestMethod.GET)String getAuthorInfo (@PathVariable("authorId") String authorId) ;
}
3)、调用方式
@RestController
public class ConsumeController {@Resourceprivate GetAuthorService getAuthorService ;@RequestMapping(value = "/getAuthorInfo")public String getAuthorInfo () {return getAuthorService.getAuthorInfo("1") ;}
}
4)、启动类注解
// 因为包名路径不同,需要加basePackages属性
@EnableFeignClients(basePackages={"cloud.block.code.service"})
5)、提供方接口
@RequestMapping(value = "/getAuthorInfo/{authorId}",method = RequestMethod.GET)
public String getAuthorInfo (@PathVariable("authorId") String authorId) {LOG.info("provider-6002");return "知了一笑"+authorId ;
}
四、源代码说明
GitHub地址:知了一笑
https://github.com/cicadasmile/spring-cloud-base
码云地址:知了一笑
https://gitee.com/cicadasmile/spring-cloud-base
SpringCloud微服务:Ribbon和Feign组件,实现服务调用的负载均衡相关推荐
- tedu 四阶段springcloud学习day02学习总结(idea连接数据库/nacos远端调用及负载均衡策略/Feign方式远端调用)
目录 查看接口有哪些实现类 ctrl + h 一.cmd方式启动Nacos的命令 二.在IDEA中打开MySQL数据库 第一步: 打开View中数据库的工具栏 第二步:添加数据库为MySql 第三步: ...
- 3.springcloud中使用Ribbon和Feign调用服务以及服务的高可用
1.消费者使用Ribbon组件负载均衡的调用服务者接口 在上一节中只介绍了如何将服务者和消费者注册到Eureka注册中心中,消费者并没有调用服务者,现在开始介绍,首先为了避免混淆,不再用上一节的消费者 ...
- SpringCloud Feign 源码底层如何调用Ribbon实现服务调用的负载均衡
在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子 这样就可以进行 ...
- 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign
SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...
- 4A服务按库拆分|组件、服务|合并打包、独立打包(进行中)
文章目录 1.说明: 2.总结(收获和感受) 3.实现 4A-server-api:定义接口,注入时通过该api实现注入:共用的常量.异常.工具类 4A-element-server服务(也可以作为组 ...
- 红帽 rhcs 组件实现 nginx 高可用负载均衡
通过 红帽 rhcs 组件进行 nginx 的负载均衡 注:不支持在集群节点中使用NetworkManager.如果已经在集群节点中安装了 NetworkManager,应该删除或者禁用该程序. 1. ...
- java服务架构 之MGW(美团点评高性能四层负载均衡)
为什么80%的码农都做不了架构师?>>> 本文整理自美团点评技术沙龙第14期:美团背后的故事-你不知道的美团云. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请 ...
- 【微服务~原始真解】Spring Cloud —— 什么是负载均衡?
- SpringCloud微服务,euraka、feign、hystrix组件学习
SpringCloud 1 eureka 1.1 eureka基本概念 eureka主要包含两个组件:Eureka Server 和 Eureka Client. eureka server(注册中心 ...
最新文章
- Common FileUpload组件的简单使用
- 复现经典:《统计学习方法》第21章 PageRank算法
- java连接电脑可以把整个文件下载到手机里然后直接用么,如果是山寨机支持java如何用电脑往手机上下载软件...
- LeetCode面试必刷题目总结 持续更新中...
- SolarWinds 攻击者开发的新后门 FoggyWeb
- 学习用Python编程时要避免的3个错误
- Windows8.1-KB2999226-x64安装提示 此更新不适用你的计算机
- ubuntu 安装 mujoco-py
- 区块链底层平台有哪些 区块链底层平台搭建
- c语言开发简单小游戏扫雷,利用C语言开发一个扫雷小游戏
- 论文写作各种图片格式转成eps格式(inkscape)
- 企业微信推送应用消息-图片(news)/图文(npmnews)/卡片/文字
- IDEA官方中文插件!!!
- 关于C++ non-aggregate cannot be initialized错误的解决
- 计算机网络和因特网笔记
- u盘安装盘的制作汇总
- The Romantic 老炮儿
- Java调用MySQL并返回数据_Java调用MySQL存储过程并获得返回值的方法
- Go语言 大话数据结构——图
- 全能超高清解码播放器_完美解码
热门文章
- Qt中设置窗体固定大小的方法
- Java中String类型的概述
- 自然语言处理简介及开发环境
- Python 查看pip安装的包的位置(查看pip安装包的路径)
- builtins.TypeError: sequence item 0: expected a bytes-like object, str found
- Octave: 'rgb2gray' undefined error
- s2sh删掉原本的s2sh project capabilities后重新添加它们
- 每天至少保证4个小时的学习时间
- mongodb sharding 试用(四)
- HttpNotificationChannel 云端推送信息实现