微服务远程调用组件Feign的使用详解

159 篇文章 5 订阅
订阅专栏
79 篇文章 1 订阅
订阅专栏

一. 概要

我们知道,现在最火且最有技术含量的技术莫过于SpringCloud微服务了,所以今天百泽老师就带大家来学习一下微服务的核心的组件之一,Feign的基本使用及其工作机制。

Feign简介

1.概念

在学习Feign的使用之前,我们先来了解一下什么是Feign。

Feign是Netflix开发的声明式(目前由Spring在维护)、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP Api。

简单地来说,Feign就是一个用于远程调用服务的框架/工具,让开发者可以更少耦合、更少代码、更加快,也更兼容的方法进行远程服务调用。

2.功能

  • Feign可插拔的注解支持,包括Feign注解和JAX-RS注解;

  • Feign与Ribbon负载均衡器、Hystrix或Sentinel熔断器无缝集成;

  • Feign支持可插拔的HTTP编码器和解码器;

  • Feign支持HTTP请求和响应的压缩等。

了解了这些基本概念之后,接下来百泽老师就带大家看看Feign组件是如何实现远程接口调用的。废话少说,我们直接上代码。

三. 服务提供者

1.添加依赖

首先我们在父POM文件中添加核心依赖如下:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba-dependencies.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

然后在子POM文件添加依赖如下:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置文件

application.yml文件中添加如下配置:

server:
  port: 8090
spring:
  application:
    name: nacos-feign-example
  cloud:
    nacos:
      discovery:
        server-addr: 112.74.42.138:8848

3.启动类

项目的启动类代码如下:

@SpringBootApplication
public class NetflixFeignProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NetflixFeignProviderApplication.class, args);
    }
}   

4.控制层

我们可以编写一个Controller控制器,将Web接口定义如下。

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    /**
     * 模拟主键自增
     */
    private AtomicInteger pk = new AtomicInteger();
    
    @PostMappingpublic User save(@RequestBody User user) {
        user.setUid(pk.incrementAndGet());
        return user;
    }

    /**
     * @param uid
     * @return
     */@GetMapping("/{uid}")
    public User user(@PathVariable("uid") int uid) {
        return User.builder()
                .uid(uid)
                .username("admin")
                .password("123456")
                .build();
    }

    @GetMapping("/users")
    public List<User> users(@RequestHeader("token") String token) {
        // 模拟从数据中获取数据
        ArrayList<User> users = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            users.add(User.builder()
                    .uid(i)
                    .username(token + i)
                    .password("123456")
                    .build());
        }
        return users;
    }

    @DeleteMapping()
    public int delete(int uid) {
        log.info("删除用户: {} 成功", uid);
        return 1;
    }
} 

5.POJO

这里再定义一个pojo实体类。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
    private Integer uid;
    private String username;
    private String password;
}

四. 服务消费者

1.添加依赖

消费者服务的核心依赖如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置文件

消费者服务的application.yml配置文件如下:

server:
  port: 8091
spring:
  cloud:
    nacos:
      discovery: 
        server-addr: 你的注册中心IP:8848
      application:
        name: feign-example-01

3.启动类

消费者服务的启动类代码。

@SpringBootApplication
// 开启Feign
@EnableFeignClients
public class NetflixFeignClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(NetflixFeignClientApplication.class, args);
    }
}

这里也需要定义一个POJO类,代码同上,此处略过。

4.Feign服务

此处我们需要定义一个Feign接口类。

@FeignClient(value = "test-feign-provider", path = "/user")
public interface UserFeignService {
    @PostMapping("/")
    User save(@RequestBody User user);

    @GetMapping("/{uid}")
    User detail(@PathVariable("uid") int uid);

    @DeleteMappingUser delete(@RequestParam int uid);

    @GetMapping("/users")
    List<User> users(@RequestHeader("token") String token);
}

5.控制层

然后我们也需要在消费者服务中定义一个Controller接口。

@RestController
@RequestMapping("/feign")
public class FeignController {
    @Resource
    UserFeignService userFeignService;
    
    /**
     *  传递复杂的对象 json格式
     * 127.0.0.1:8091/feign/register
     */@PostMapping("/register")
    public User register(@RequestBody User user) {
        return userFeignService.save(user);
    }
    /**
     * 127.0.0.1:8091/feign/1
     */@GetMapping("/{uid}")
    public User detail(@PathVariable int uid) {
        return userFeignService.detail(uid);
    }
    /**
     * 127.0.0.1:8091/feign/users
     * 
     */@GetMapping("/users")
    public List<User> users(@RequestHeader String token) {
        return userFeignService.users(token);
    }
}

代码编写完毕后,我们需要将服务提供者和服务消费者两个项目都启动起来,然后进行测试。

五. 测试

1.测试get请求

2.测试post请求,json数据格式

3.测试头部中包含信息

通过测试我们就可以发现,测试我们已经实现了在服务消费者中原创调用服务提供者里的接口,从而实现了接口的远程调用。

javahttp调用组件深入详解
congge
04-27 6852
javahttp调用组件深入详解
详解Spring-Cloud2.0之Feign调用远程服务指南
08-26
主要介绍了详解Spring-Cloud2.0之Feign调用远程服务指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
详解Feign远程调用
逐梦苍穹的博客
03-19 2751
本文介绍一种更为方便快捷的远程调用方式-Feign
Feign远程调用
吴大侠的博客
03-22 5983
一、Feign简介 Feign是Netflix开发的一个轻量级RESTful的HTTP服务客户端(用它来发起请求, 远程调用的),是以Java接口注解的方式调用Http请求,而不用像Java通过封装 HTTP请求报文的方式直接调用,Feign被广泛应用在Spring Cloud 的解决方案。类似于Dubbo,服务消费者拿到服务提供者的接口,然后像调用本地接口方法一样 去调用,实际发出的是远...
Feign远程调用组件
jiqiren1994的博客
01-28 210
引言 服务消费者调⽤服务提供者的时候使⽤RestTemplate技术存在许多不便之处: 1)拼接url 2)restTmplate.getForObJect Feign简介 Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是以Java接口注解的方式调用Http请求,⽽不⽤像Java通过封装HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案。 类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本
SpringCloud微服务负载均衡:Feign详解与应用
Feign默认集成了Netflix的Ribbon组件,Ribbon是一个客户端负载均衡器,负责在调用远程服务时,从一组服务实例选择一个进行调用。当Feign调用其他微服务时,会自动利用Ribbon进行负载均衡,无需开发者手动处理。...
SpringCloud核心组件Feign声明式服务调用
最新发布
kkchenjj的博客
07-13 884
在import orgimport orgGetMapping;import org在这个接口,我们使用了注解来声明这是一个Feign客户端,name属性指定了要调用的服务名称。注解定义了HTTP GET请求的URL,用于从URL获取参数。Feign支持多种编码器和解码器,我们可以通过实现Encoder和Decoder接口来自定义数据的序列化和反序列化方式。例如,如果我们想要使用
Spring Cloud负载均衡及远程调用实现详解
08-24
在本篇文章,我们将重点讨论Spring Cloud的负载均衡和远程调用实现,这两个概念对于构建可扩展、高可用的微服务架构至关重要。 首先,让我们深入理解负载均衡。负载均衡的主要目标是将来自客户端的请求均匀地...
微服务生态组件Spring Cloud OpenFeign详解和源码分析.doc
07-08
首先,我们需要了解 Feign 的工作机制,Feign 是一个声明式的 HTTP 客户端,使得使用 HTTP 请求远程服务时就像调用本地方法一样的体验。然后,我们将了解 Spring Cloud OpenFeign 是如何基于 Feign 实现的,如何与 ...
微服务组件-远程调用
xry12354的博客
04-18 765
摘要:文章主要介绍了远程调用组件Feign,通过案例的形式讲述了Feign的基本用法、配置Feign、如何创建一个Feign Client Starter以及处理常见的问题等
远程调用--Feign
weixin_65549694的博客
06-27 281
之前使用RestTemplate进行服务之间的调用,在代码风格上来看不太统一和美观,存在代码可读性差,编程体验不统一参数复杂URL难以维护的问题,Feign就可以解决这个问题。Feign是一个声明式的http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。而且Feign默认集成了Ribbon,所以使用Feign默认就实现了负载均衡的效果。我们在消费者这一方,也就是调用其他服务的这一方进行Feign
十一.引入Fegin组件,提供远程调用功能
绅士jiejie的博客
06-04 353
一.引入Fegin依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 以上依赖在项目初建时其实就已经导入了 二.创建一个远程服务的包,同时编写远程服
Feign远程调用基本使用
上官玺的博客
09-04 940
Feign简单调用
微服务远程调用使用Feign组件
qq_45780016的博客
09-15 684
我们知道微服务是将不同业务的模块作为一个独立的服务,将众多的微服务一起构成整个的系统。如下图所示:该系统包含多个微服务,而每个微服务都有一个启动类。各个服务之间互不影响。
微服务组件Feign
qq_35529931的博客
09-03 286
是Netflix开发的声明试、模板化的HTTP客户端,更加便捷、优雅的调用HTTP的API;内部集成了Ribbon,与之不同的是,feign只需要定义服务绑定接口且声明的方法,实现服务的调用。通过 Options 可以配置连接超时时间和读取超时时间,Options 的第一个参数是连接的超时时间(ms), 默认值是 2s;spring CloudFeign的基础上实现了OpenFeign支持了Spring mvc的注解。Feign的底层用的是Ribbon,但超时时间以Feign配置为准。
springcloud组件远程调用Feign
zzh18856960604的博客
03-09 282
OpenFeign使用 思考: 使用RestTemplate+ribbon已经可以完成服务间的调用,为什么还要使用feign? String restTemplateForObject = restTemplate.getForObject("http://服务名/url?参数" + name, String.class); 存在问题 每次调用服务都需要写这些代码,存在大量冗余 服务地址如果修改,维护成本高 使用不够灵活 OpenFeign组件 0.说明 Feign是一个声明式的伪Http客户端,
【精华】什么是Feign?为什么要使用Feign远程访问?三分钟带你入门
热门推荐
喵仙人
12-10 1万+
有道词典的英文解释: 为什么叫伪装? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。 项目主页:https://github.com/OpenFeign/feign 2.2.快速入门 2.2.1.导入依赖 &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;g...
SpringCloud微服务组件——Feign快速入门
ya_yongng的博客
07-21 223
Feign Feign作用 Feign可以帮助我们实现面向接口编程,就直接调用其他的服务,简化开发。 Feign的快速入门 导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 添加一个注解 @Enabl
写文章

热门文章

  • 手把手教你解决ArrayIndexOutOfBoundsException数组越界异常 15854
  • Java初学最容易犯的错,数组下标越界异常怎么解决呢? 13270
  • Windows中安装配置Maven详细教程 12489
  • 8个维度,详细分析JDK11的新特性! 12465
  • BindingException异常的产生原因及解决过程详解 11363

分类专栏

  • V哥原创技术栈 287篇
  • SpringBoot专栏 7篇
  • 面试技巧 30篇
  • 分布式 79篇
  • Java毕业设计 7篇

最新评论

  • 10款好用的开源 HarmonyOS 工具库

    ha_lydms: 博主文章深度理解和清晰的表达方式使复杂的技术概念变得容易理解,值得收藏点赞。博主用心很有耐心,更有对知识的热忱和热爱,写了这么实用有效的分享,期盼博主能够光顾我的博客,给予宝贵的指导!

  • spring为什么使用三级缓存而不是两级?

    qq_43430997: 一眼AI

  • 【超长好文】Redis在项目中的17种使用场景

    威哥爱编程(马剑威): 老友啊表情包表情包

  • 【超长好文】Redis在项目中的17种使用场景

    xiaoxiao7440: 还得是威哥,从兄弟连开始到现在,关注好多年了,希望威哥越来越好

  • spring为什么使用三级缓存而不是两级?

    轻松的小希: 构造器循环依赖spring解决不了,如果只为了解决循环依赖,二级缓存就够用了,三级缓存是为了保证动态代理的

大家在看

  • 【精品毕设推荐】基于微信小程序的考试系统设计与实现 650
  • 苹果通讯录丢了怎么恢复?掌握这四招,快速恢复苹果手机数据!
  • Artificial Intelligence
  • MySQL高级SQL语句与高级操作 457
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的外卖配送平台系统的设计与实现

最新文章

  • 10月22日纯血鸿蒙正式版发布意味着什么?
  • 鸿蒙开发超好用的 UI 组件和工具类库 BasicLibrary
  • Java 如何确保 JS 不被缓存
2024
10月 17篇
09月 30篇
08月 40篇
07月 47篇
06月 27篇
05月 30篇
04月 37篇
03月 18篇
2023年15篇
2022年189篇
2021年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

威哥爱编程(马剑威)

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家山西景观玻璃钢雕塑阿拉善盟玻璃钢雕塑仿真人物玻璃钢雕塑公司松江商场美陈宁陵玻璃钢雕塑定制宣城定制玻璃钢雕塑市场商场的美陈灯光晋中玻璃钢海豚雕塑厂家合肥玻璃钢雕塑加工银川仿铜玻璃钢雕塑邳州商场中庭美陈玻璃钢雕塑好货源好价格玻璃钢卡通雕塑发光云南省玻璃钢雕塑厂家韶关玻璃钢动物雕塑商家玻璃钢门头雕塑内江玻璃钢仿真水果雕塑定制定安玻璃钢仿铜麒麟雕塑艺术商场美陈多少钱登封玻璃钢雕塑多少钱河南季节性商场美陈制造常州卡通雕塑玻璃钢梅州公仔玻璃钢卡通雕塑张界玻璃钢大白菜雕塑玻璃钢景观雕塑哪家强无锡设计玻璃钢雕塑费用玻璃钢景观雕塑定制厂家运城太湖石玻璃钢卡通雕塑厂家抚州玻璃钢雕塑背景甘南广场玻璃钢雕塑定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化