文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringCloud中Ribbon和Feign组件如何使用

2023-06-02 11:43

关注

SpringCloud中Ribbon和Feign组件如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、Ribbon简介

1、基本概念

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

2、负载均衡简介

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

1)集中式

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

2)进程内

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

3、Ribbon负载策略

SpringCloud中Ribbon和Feign组件如何使用

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

二、Feign简介

基本概念

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

执行流程

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

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

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

三、综合使用案例

1、项目结构图

SpringCloud中Ribbon和Feign组件如何使用

1)、模块描述

Eureka注册中心node02-eureka-7001两个服务提供方node02-provider-6001node02-provider-6002Ribbon服务调用node02-consume-8001Feign服务调用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)、配置文件

@Configurationpublic class LoadConfig {    @Bean    @LoadBalanced    public RestTemplate getRestTemplate (){        return new RestTemplate() ;    }    @Bean    public IRule getIRule (){        // 默认轮询算法        // return new RoundRobinRule() ;        // 重试算法:默认情况,访问某个服务连续三次失败,就不会再访问        // return new RetryRule() ;        // 随机算法        return new RandomRule() ;    }}

3)、调用方式

@RestControllerpublic class ConsumeController {    @Autowired    private 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)、调用方式

@RestControllerpublic class ConsumeController {    @Resource    private 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 ;}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯