SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡

一、Ribbon简介

1、基本概念

>Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制。

2、负载均衡简介

目前主流的负载均衡方案可分成两类:

1)集中式

>即在服务的消费方和提供方之间使用独立的LB设施,可以是硬件,如F5,也可以是软件,如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方;

2)进程内

>将LB逻辑集成到消费方,消费方从服务注册中心获取可用服务列表,然后根据指定负载均衡策略选择合适的服务器。Ribbon就属于该方式。

3、Ribbon负载策略

11) RoundRobinRule 轮询 2轮询服务列表List<server>的index,选择index对应位置的服务。 32) RandomRule 随机 4随机服务列表List<server>的index,选择index对应位置的服务。 53) RetryRule 重试 6指定时间内,重试(请求)某个服务不成功达到指定次数,则不再请求该服务。

二、Feign简介

1、基本概念

>Feign 是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 接口类注解。

2、执行流程

>1) 主程序入口添加 @EnableFeignClients 注解开启对 FeignClient 接口扫描加载。接口使用@FeignClient注解。

>2) 调用Feign 接口中的方法被时,通过JDK的代理的方式,生成具体的 RequestTemplate。

>3) RequestTemplate 生成 Request请求,结合Ribbon实现服务调用负载均衡策略。

三、综合使用案例

1、项目结构图

1)、模块描述

1Eureka注册中心 2node02-eureka-7001 3两个服务提供方 4node02-provider-6001 5node02-provider-6002 6Ribbon服务调用 7node02-consume-8001 8Feign服务调用 9node02-consume-8002

2)、依赖Eureka知识

上篇文章Eureka使用:

2、Ribbon服务调用

代码所属模块:node02-consume-8001

1)、核心依赖

1<dependency> 2 <groupid>org.springframework.cloud</groupid> 3 <artifactid>spring-cloud-starter-ribbon</artifactid> 4</dependency>

2)、配置文件

1@Configuration 2public class LoadConfig { 3 @Bean 4 @LoadBalanced 5 public RestTemplate getRestTemplate (){ 6 return new RestTemplate() ; 7 } 8 @Bean 9 public IRule getIRule (){ 10 // 默认轮询算法 11 // return new RoundRobinRule() ; 12 // 重试算法:默认情况,访问某个服务连续三次失败,就不会再访问 13 // return new RetryRule() ; 14 // 随机算法 15 return new RandomRule() ; 16 } 17} 18

3)、调用方式

1@RestController 2public class ConsumeController { 3 4 @Autowired 5 private RestTemplate restTemplate ; 6 7 String server_name = "http://NODE02-PROVIDER" ; 8 // http://localhost:8001/showInfo 9 @RequestMapping("/showInfo") 10 public String showInfo (){ 11 return restTemplate.getForObject(server_name+"/getInfo",String.class) ; 12 } 13 14}

这里的NODE02-PROVIDER就是服务提供方的配置文件。两个服务提供方的这块配置相同,Ribbon正基于此,实现多个服务调用的负载均衡。

1spring: 2 application: 3 name: node02-provider

4)、提供方接口

1@RequestMapping("/getInfo") 2public String getInfo (){ 3 LOG.info("provider-6002"); 4 return "success" ; 5}

3、Feign服务调用

代码所属模块:node02-consume-8002

1)、核心依赖

1<dependency> 2 <groupid>org.springframework.cloud</groupid> 3 <artifactid>spring-cloud-starter-feign</artifactid> 4</dependency>

2)、配置文件

1@FeignClient(value = "NODE02-PROVIDER") 2public interface GetAuthorService { 3 @RequestMapping(value = "/getAuthorInfo/{authorId}",method = RequestMethod.GET) 4 String getAuthorInfo (@PathVariable("authorId") String authorId) ; 5}

3)、调用方式

1@RestController 2public class ConsumeController { 3 @Resource 4 private GetAuthorService getAuthorService ; 5 @RequestMapping(value = "/getAuthorInfo") 6 public String getAuthorInfo () { 7 return getAuthorService.getAuthorInfo("1") ; 8 } 9}

4)、启动类注解

1// 因为包名路径不同,需要加basePackages属性 2@EnableFeignClients(basePackages={"cloud.block.code.service"})

5)、提供方接口

1@RequestMapping(value = "/getAuthorInfo/{authorId}",method = RequestMethod.GET) 2public String getAuthorInfo (@PathVariable("authorId") String authorId) { 3 LOG.info("provider-6002"); 4 return "知了一笑"+authorId ; 5}

四、源代码说明

1GitHub地址:知了一笑 2https://github.com/cicadasmile 3码云地址:知了一笑 4https://gitee.com/cicadasmile

</server></server>

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springcloud

Ribbon简介Ribbon是管理HTTP和TCP服务客户端的负载均衡器。Ribbon具有一些列带有名称的客户端,也就是带有名称的Ribbon客户端。每个客户端由可配置的组件构成,负责一类服务的调用请求。SpringCloud通过RibbonClientConfiguration为每个Ribbon客户端创建一个Appl

SpringCloud负载均衡笔记

SpringCloud的负载均衡组件用的是Ribbon,这个东西就是服务消费者。它只是一个配置用的中转器,放在Zuul和 EurekaClient之间用来转发的,它里面写了好多规则,用来指定负载的规则。首先,Zuul:application.ymleureka:client:serviceUrl:

SpringCloud系列——Zuul 动态路由

  前言  Zuul是在SpringCloudNetflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是Netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和Netflix流应用的Web网站后端所有请求的前门。本文基于上篇(SpringCloud系列——Ribbon负载均衡(https://www.

SpringCloud Ribbon

客户端负载均衡器:RibbonRibbon是一个客户端负载平衡器,它可以很好地控制HTTP和TCP客户端的行为。Feign已经使用Ribbon,所以如果你使用@FeignClient,那么这一节也适用。Ribbon中的中心概念是命名客户端的概念。每个负载平衡器是组合的组合的一部分,它们一起工作以根据需要联系远程服务

SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法

一、Ribbon是什么?  SpringCloudRibbon是基于NetflixRibbon实现的一套客户端 负载均衡的工具(这里区别于nginx的负载均衡)。简单来说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix中间服务连接在一起。Ribbon客户端组件