一、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、执行流程

  1. 主程序入口添加 @EnableFeignClients 注解开启对 FeignClient 接口扫描加载。接口使用@FeignClient注解。
  1. 调用Feign 接口中的方法被时,通过JDK的代理的方式,生成具体的 RequestTemplate。
  1. 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组件,实现服务调用的负载均衡相关推荐

  1. tedu 四阶段springcloud学习day02学习总结(idea连接数据库/nacos远端调用及负载均衡策略/Feign方式远端调用)

    目录 查看接口有哪些实现类 ctrl + h 一.cmd方式启动Nacos的命令 二.在IDEA中打开MySQL数据库 第一步: 打开View中数据库的工具栏 第二步:添加数据库为MySql 第三步: ...

  2. 3.springcloud中使用Ribbon和Feign调用服务以及服务的高可用

    1.消费者使用Ribbon组件负载均衡的调用服务者接口 在上一节中只介绍了如何将服务者和消费者注册到Eureka注册中心中,消费者并没有调用服务者,现在开始介绍,首先为了避免混淆,不再用上一节的消费者 ...

  3. SpringCloud Feign 源码底层如何调用Ribbon实现服务调用的负载均衡

    在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子 这样就可以进行 ...

  4. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

    SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...

  5. 4A服务按库拆分|组件、服务|合并打包、独立打包(进行中)

    文章目录 1.说明: 2.总结(收获和感受) 3.实现 4A-server-api:定义接口,注入时通过该api实现注入:共用的常量.异常.工具类 4A-element-server服务(也可以作为组 ...

  6. 红帽 rhcs 组件实现 nginx 高可用负载均衡

    通过 红帽 rhcs 组件进行 nginx 的负载均衡 注:不支持在集群节点中使用NetworkManager.如果已经在集群节点中安装了 NetworkManager,应该删除或者禁用该程序. 1. ...

  7. java服务架构 之MGW(美团点评高性能四层负载均衡)

    为什么80%的码农都做不了架构师?>>>    本文整理自美团点评技术沙龙第14期:美团背后的故事-你不知道的美团云. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请 ...

  8. 【微服务~原始真解】Spring Cloud —— 什么是负载均衡?

  9. SpringCloud微服务,euraka、feign、hystrix组件学习

    SpringCloud 1 eureka 1.1 eureka基本概念 eureka主要包含两个组件:Eureka Server 和 Eureka Client. eureka server(注册中心 ...

最新文章

  1. Common FileUpload组件的简单使用
  2. 复现经典:《统计学习方法》第21章 PageRank算法
  3. java连接电脑可以把整个文件下载到手机里然后直接用么,如果是山寨机支持java如何用电脑往手机上下载软件...
  4. LeetCode面试必刷题目总结 持续更新中...
  5. SolarWinds 攻击者开发的新后门 FoggyWeb
  6. 学习用Python编程时要避免的3个错误
  7. Windows8.1-KB2999226-x64安装提示 此更新不适用你的计算机
  8. ubuntu 安装 mujoco-py
  9. 区块链底层平台有哪些 区块链底层平台搭建
  10. c语言开发简单小游戏扫雷,利用C语言开发一个扫雷小游戏
  11. 论文写作各种图片格式转成eps格式(inkscape)
  12. 企业微信推送应用消息-图片(news)/图文(npmnews)/卡片/文字
  13. IDEA官方中文插件!!!
  14. 关于C++ non-aggregate cannot be initialized错误的解决
  15. 计算机网络和因特网笔记
  16. u盘安装盘的制作汇总
  17. The Romantic 老炮儿
  18. Java调用MySQL并返回数据_Java调用MySQL存储过程并获得返回值的方法
  19. Go语言 大话数据结构——图
  20. 全能超高清解码播放器_完美解码

热门文章

  1. Qt中设置窗体固定大小的方法
  2. Java中String类型的概述
  3. 自然语言处理简介及开发环境
  4. Python 查看pip安装的包的位置(查看pip安装包的路径)
  5. builtins.TypeError: sequence item 0: expected a bytes-like object, str found
  6. Octave: 'rgb2gray' undefined error
  7. s2sh删掉原本的s2sh project capabilities后重新添加它们
  8. 每天至少保证4个小时的学习时间
  9. mongodb sharding 试用(四)
  10. HttpNotificationChannel 云端推送信息实现