Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringCloud 连载(五) : Feign轻松实现Rest接口调用(附视频)

SpringCloud 连载(五) : Feign轻松实现Rest接口调用(附视频)

作者头像
不安分的猿人
发布于 2020-03-02 03:41:02
发布于 2020-03-02 03:41:02
1.2K00
代码可运行
举报
文章被收录于专栏:不安分的猿人不安分的猿人
运行总次数:0
代码可运行

上期回顾

上期我们讲了SpringCloud中Ribbon负载均衡.学会了现实中一个非常实用的技能.有兴趣的同学可以看一下.

SpringCloud 连载(四) : Ribbon负载均衡与自定义算法

本期内容

Feign:

1:Feign是什么?

2:如何使用?

Feign是什么

Feign主要用于客户端调用WebService接口,让调用接口像调用对象的方法一样简单。

比如:

创建一个公共的common组件,在里面写一个接口,声明几个方法,然后让服务端去实现这个接口,同时把这个接口打成的jar丢给客户端的工程师调用,工程师通过Spring Autowired去把这个对象取出来,就可以直接调用服务端实现的方法,有点像gRpc技术.

通过SpringCoud的封装使其支持springMVC注解与

HttpMessageConerters,他可以与Eureka和Ribbon配合使用以支持负载均衡.

通俗的说:

Fegin是一个声明式的Web服务客户端,使得开发web客户端变的更加简单.

使用:只需要创建一个接口,然后在上面添加注解就可以了。

以往使用调用Rest Api:

之前我们使用Ribbon+RestTemlate对Http进行请求封装访问,我们需要写入服务的地址等信息,实际开发中会有很多微服务接口,我们就得定义好多微服务的地址.Fegin在这些的基础上做了一些优化,使得我们在使用的时候,像声明一个 Service一样直接调用接口的方法.

如何使用

第一步:新创建一个模块;

名称:msc-consumer-department-80-feign

内容与msc-consumer-department-80相同;

pom中加入fegin的GAV配置;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--Feign 开始-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!--Feign 结束-->

第二步:在msc-api的pom.xml中加入对feign的支持

因为有可能其他模块也要调用,所以我们把这个类放在一个公共的模块中.

在msc-api的pom.xml中加入对feign的支持

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--Feign 开始-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!--Feign 结束-->

第三步:在msc-api模块中创建一个接口类;

注意:

1:里面的方法和Server端Controller里面方法相同.(可不同)

2:每个方法的RequestMapping一定要与Server端Controller里面的注解相同(路径保持一致)

3:添加注解@FeignClient(value = "MSC-DEPARTMENT")参数就是Eureka中注册部门Server的实例名称

** 这个类可以看作是Server端Controller类的一个接口。

请输入标题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.xiaobaibi.webservice;

import com.xiaobaibi.bean.Department;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.*;

import java.util.List;

// 开启Feign,并告诉服务我指向的是Eureka中的哪个微服务
@FeignClient(value = "MSC-DEPARTMENT")
public interface DeparmentWebService {

    /**
     * 新增部门
     * @param department
     * @return
     */
    @PostMapping(value = "/department/insert")
    public boolean insertDept(Department department);
    /**
     * 根据 ID 查询
     * @return
     */
    @GetMapping(value = "/department/get/{dId}")
    public Department getDepartmentById(@PathVariable("dId") Long dId);

    /**
     * 全查
     * @return
     */
    @GetMapping(value = "/department/list")
    public List<Department> list();
}

第五步:在客户端的主启动类中加入注解,参数传入第四步接口的包名;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@EnableFeignClients(basePackages = {"com.xiaobaibi.webservice"})

该注解用于让Spring将这个类注入到容器中.

注意:这个一定要在客户端,就是启用Rest API的模块;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.xiaobaibi.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication
@EnableEurekaClient
// 对部门微服务加负载均衡自定义算法
@EnableFeignClients(basePackages = {"com.xiaobaibi.webservice"})
public class MscConsumerApplication_Feign {

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

第六步:客户端Controller调用;

之前我们是通过RestTemplete输入Rest地址,现在我们把第四步创建的接口当做一个Service直接声明调用就可以了,同其他的Service一样直接Autowired即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Feign方式的 Service
 */
@Autowired
private DeparmentWebService deparmentWebService;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
@RequestMapping(value = "/consumer")
public class DepartConsumerController {
    /**
     * Feign方式的 Service
     */
    @Autowired
    private DeparmentWebService deparmentWebService;

    /**
     * 新增部门
     * @param department
     * @return
     */
    @RequestMapping(value = "/insert")
    public boolean insertDept(Department department){
        return deparmentWebService.insertDept(department);
    }
    /**
     * 根据 ID 查询
     * @return
     */
    @RequestMapping(value = "/get/{dId}")
    public Department getDepartmentById(@PathVariable("dId") Long dId){
        return deparmentWebService.getDepartmentById(dId);
    }

    /**
     * 全查
     * @return
     */
    @RequestMapping(value = "/list")
    public List<Department> list(){
        return deparmentWebService.list();
    }
}

总结

如此即可,我们相当于创建一个接口,这个接口可以看作是Server端Controller的接口,之后加入Feign的注解后,在调用的地方直接创建一个service进行调用,非常的方便,另外,该技术自带Ribbon负载均衡功能(默认轮询)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不安分的猿人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringCloud服务接口调用OpenFegin
cheese
2023/10/25
2490
SpringCloud服务接口调用OpenFegin
springcloud:OpenFeign服务接口调用
​ Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可.
冷环渊
2021/10/19
7200
SpringCloud Fegin 负载均衡
Fegin 是一个声明式 WebService客户端。使用 Fegin能让编写 Web Service 客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解即可,同时支持 JAX-RS标准的注解。Feign 也支持可拔插式的编码器和解码器。SpringCloud 对 Feign 进行了封装,使其支持了 Spring MVC 标准注解和 HttpMessageConverters(Http请求/响应与Java对象之间的转换)。Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡。可参考官网:https://github.com/OpenFeign/feign
Java架构师必看
2021/05/06
4470
SpringCloud--Netflix入门
SpringCloud是一系列框架的集合,目的是将业务系统拆分成一个个微服务,服务于服务之间相互独立,支持水平扩展,高可用,微服务架构主要的功能有服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,Netflix虽然已经过时了,但是他框架集和其他微服务框架集作用差不多
aruba
2022/09/20
5310
SpringCloud--Netflix入门
SpringCloud的入门学习之概念理解、Feign负载均衡入门
  Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
别先生
2019/12/02
4960
SpringCloud学习笔记(3):使用Feign实现声明式服务调用
Feign是一个声明式的Web Service客户端,它简化了Web服务客户端的编写操作,相对于Ribbon+RestTemplate的方式,开发者只需通过简单的接口和注解来调用HTTP API。它支持Spring MVC注解和JAX-RS注解,还支持可插拔式的编码器和解码器。整合了Eureka,Ribbon和Hystrix,具有可插拔、基于注解、负载均衡、服务熔断等一系列便捷功能。
布禾
2020/10/29
4090
SpringCloud学习笔记(3):使用Feign实现声明式服务调用
集成Ribbon的客户端调用工具——Feign
什么是Feign? 客户端调用工具 Ribbon+RestTemplate Feign Feign特性: Feign本身包含Ribbon Fegin是一个采用基于接口的注解的声明式客户端调用工具,更加
Noneplus
2019/09/24
4980
集成Ribbon的客户端调用工具——Feign
java高级进阶|SpringCloud之服务调用组件Feign
Feign是一个声明式WebService客户端,使用Feign能让编写WebService客户端更加简单,它的使用方式是定义一个接口,然后在上面添加 注解,同时也支持JAX-RS标准的注解,Feign也支持可插拔式的编码器和解码器,Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters,Feign可以与Eureka和Ribbon组合使用以支持负载均衡。只需要你创建一个接口,然后在上面添加注解即可。
码农王同学
2020/07/14
5630
java高级进阶|SpringCloud之服务调用组件Feign
Spring Cloud【Finchley】-06服务消费者整合Feign
回想下我们在使用Eureka 和 Ribbon的时候是怎么调用注册在Eureka Server上的微服务的地址呢?
小小工匠
2021/08/17
3360
OpenFeign服务接口调用
  官方文档:https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign
别团等shy哥发育
2023/02/25
7380
OpenFeign服务接口调用
SpringCloud入门(五)-服务消费者(Feign)
Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,并和 Eureka 结合,默认实现了负载均衡的效果(所以说服务消费者一般使用Feign)
故里
2020/11/25
1.5K0
SpringCloud:Eureka服务注册与发现
Eureka 其实就是一个 服务注册与发现的中心,也就是相当于我们前面做的一些生产者的服务需要注册到我们的注册中心,那么我们的消费者就不用把代码写死,而是可以去服务中心订阅对应的服务,获取服务的最新地址,并且进行逻辑解耦。
lwen
2018/07/23
9030
Spring-Cloud微服务实战(五)-Feign应用通信
Feign是声明式的Web服务客户端。它使编写Web服务客户端更加容易。要使用Feign,请创建一个接口并添加注解。它支持可插拔的注解,包括Feign注解和JAX-RS(Java API for RESTful Web Services)注解。
JavaEdge
2021/02/22
4490
SpringCloud教程-05:负载均衡(Feign)
在SpringCloud教程-03:负载均衡(Ribbon)一文中,我们介绍了如何使用Ribbon来实现客户端的负载均衡,在使用Ribbon时,一般会用RestTemplate来实现对远程服务的调用,但是这依旧不够简洁,每次在使用RestTemplate去远程调用时,还是得写一些模板化的东西。Spring Cloud Feign,在此基础上做了更进一步的封装,我们只需要创建一个接口,并使用注解的方式配置一下,就可以完成对服务提供方的绑定和调用。
IT云清
2019/05/15
7140
SpringCloud教程-05:负载均衡(Feign)
Feign(负载均衡)
文章目录 1. Feign 负载均衡 1.1. 简介 1.2. 使用 1.3. 注意 1.4. 负载均衡算法 Feign 负载均衡 简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。 声明式的接口+注解 使用的是轮询的算法 使用 添加依赖(消费者端
爱撒谎的男孩
2019/12/31
1.1K0
springCloud - 第4篇 - 消费者调用服务 ( Feign )
2. spring Initializr - module SDK 选择自己的 JDK ,其余的可以不用填写,next。
微风-- 轻许--
2019/08/01
5320
【Spring Cloud】006-Feign负载均衡
Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service;
訾博ZiBo
2025/01/06
1590
【Spring Cloud】006-Feign负载均衡
服务发现组件 Eureka 实现服务间的调用组件Feign
Eureka是Netflix公司开发的服务发现框架,SpringCloud将它集成在自己的子项目 spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件: Eureka Server和Eureka Client。
名字是乱打的
2022/05/13
5470
SpringCloud详细教程 | 第三篇: 声明性REST客户端Feign(Greenwich版本)
Spring Cloud有两种服务调用方式,一种是Ribbon+RestTemplate,另一种是Feign,上一篇文章,讲述了如何通过Ribbon+RestTemplate去调用服务,这篇文章主要讲述如何通过Feign去调用服务
小东啊
2019/06/26
9860
SpringCloud详细教程 | 第三篇: 声明性REST客户端Feign(Greenwich版本)
SpringCloud-基于Feign远程调用
Spring Cloud是分布式系统的开发工具包,包含多个微服务组件,其中Feign是一款声明式的Web服务客户端,极大简化了在Spring Cloud中进行远程调用的流程。文章将详细介绍如何利用Feign实现更优雅的多参数远程调用,通过Feign的注解和自动化配置,减少了手动拼接URL和请求参数的繁琐工作,提高了代码的清晰度和可维护性。这篇文章旨在帮助开发者更好地利用Spring Cloud中的Feign组件,构建更高效、可扩展的分布式系统。
Damon小智
2024/02/20
5850
SpringCloud-基于Feign远程调用
相关推荐
SpringCloud服务接口调用OpenFegin
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档