Spring Cloud OpenFeign实例介绍使用方法

 更新时间:2022年09月10日 11:23:01   作者:C陈三岁  
Spring Cloud OpenFeign 对 Feign 进行了二次封装,使得在 Spring Cloud 中使用 Feign 的时候,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程访问,更感知不到在访问 HTTP 请求

一. OpenFeign概述

OpenFeign 可以将提供者提供的 Restful 服务伪装为接口进行消费,消费者只需使用“ feign 接口 + 注解 ”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate 。

注意:

  • Feign 只涉及到消费者端,与提供者端无关
  • Feign 仅仅是一个伪客户端,其不会对请求做任何处理。即其与使用 RestTemplate 效果 是一样的
  • Feign 是通过注解实现RESTful 请求的

二. 使用步骤

2.1 feign接口模块

单独将feign接口放在模块中,方便后续为各个服务使用。

2.1.1依赖配置

springCloud版本使用

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <!--fegin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    <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.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

2.1.2编写FeignClient的接口, 并加@FeignCleint 注解

url写死在接口中不方便,可以使用动态参数配置,只需要在配置文件中添加key为feign.client.url的路径。这里使用是单体模式,如果分布式项目中配置多个url管理起来非常费事,就需要升级使用注册中心来解决。

import com.example.vo.DepartVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
// 注意,接口名与方法名可以随意
// 参数指定了要访问的提供者微服务名称
//@FeignClient(url ="http://127.0.0.1:8081", value="abcmsc-provider-depart", path = "/provider/depart")
@FeignClient(url ="${feign.client.url}", value="abcmsc-provider-depart", path = "/provider/depart")
public interface DepartService {
    @PostMapping("/save")
    boolean saveDepart(@RequestBody DepartVO depart);
    @DeleteMapping("/del/{id}")
    boolean removeDepartById(@PathVariable("id") int id);
    @PutMapping("/update")
    boolean modifyDepart(@RequestBody DepartVO depart);
    @GetMapping("/get/{id}")
    DepartVO getDepartById(@PathVariable("id") int id);
    @GetMapping("/list")
    List<DepartVO> listAllDeparts();
}

2.2 消费端使用fegin接口

2.2.1在消费者端添加feign接口依赖

2.2.2在消费者端配置文件中添加 feign.client.url

指定服务端的url和端口

2.2.3在消费者端启动类中添加@EnableFeignClients

开启Feign功能:此注解会扫描启动类所在的包及其子包下面@FeignClient标注的接口,将其交给spring容器管理,方便后续使用。

2.2.4在消费者端使用fegin接口

需要在哪里使用接口直接注入后即可使用

import com.example.providerapi.DepartService;
import com.example.vo.DepartVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/consumer/depart")
public class DepartController {
    @Autowired
    private DepartService departService;
    @PostMapping("/save")
    public boolean saveHandle(@RequestBody DepartVO depart) {
 
        return departService.saveDepart(depart);
    }
    @DeleteMapping("/del/{id}")
    public void deleteHandle(@PathVariable("id") int id) {
        departService.removeDepartById(id);
    }
    @PutMapping("/update")
    public void updateHandle(@RequestBody DepartVO depart) {
        departService.modifyDepart(depart);
    }
    @GetMapping("/get/{id}")
    public DepartVO getHandle(@PathVariable("id") int id) {
        return departService.getDepartById(id);
    }
    @GetMapping("/list")
    public List<DepartVO> listHandle() {
        return departService.listAllDeparts();
    }
}

2.3 测试

启动生产者服务,消费者服务

http://localhost:8080/consumer/depart/save

到此这篇关于Spring Cloud OpenFeign实例介绍使用方法的文章就介绍到这了,更多相关Spring Cloud OpenFeign内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 将JavaDoc注释生成API文档的操作

    将JavaDoc注释生成API文档的操作

    这篇文章主要介绍了将JavaDoc注释生成API文档的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • MybatisPlus查询条件为空字符串或null问题及解决

    MybatisPlus查询条件为空字符串或null问题及解决

    这篇文章主要介绍了MybatisPlus查询条件为空字符串或null问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例

    SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例

    本文主要介绍了SpringBoot+thymeleaf+Echarts+Mysql 实现数据可视化读取的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 详解Java如何实现小顶堆和大顶堆

    详解Java如何实现小顶堆和大顶堆

    今天给大家带来的是关于Java的相关知识,文章围绕着Java如何实现小顶堆和大顶堆展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下
    2021-06-06
  • 深入了解JAVA 软引用

    深入了解JAVA 软引用

    这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • springboot项目接入第三方qq邮箱验证登录的全过程

    springboot项目接入第三方qq邮箱验证登录的全过程

    互联网发展到现在,相必大家都知道发送邮件应该是网站的必备功能之一,下面这篇文章主要给大家介绍了关于springboot项目接入第三方qq邮箱验证登录的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Java多线程 Guarded Suspension设计模式

    Java多线程 Guarded Suspension设计模式

    这篇文章主要介绍了Java多线程 Guarded Suspension设计模式,Guarded Suspension意为保护暂停,其核心思想是仅当服务进程准备好时,才提供服务,文章围绕Java多线程 Guarded Suspension展开内容,需要的朋友可以参考一下
    2021-10-10
  • 编译大型Java项目class冲突导致报错的解决方案

    编译大型Java项目class冲突导致报错的解决方案

    这篇文章给大家盘点编译大型项目class冲突导致报错的解决方案,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • MyBatis中的关联关系配置与多表查询的操作代码

    MyBatis中的关联关系配置与多表查询的操作代码

    本文介绍了在MyBatis中配置和使用一对多和多对多关系的方法,通过合理的实体类设计、Mapper接口和XML文件的配置,我们可以方便地进行多表查询,并丰富了应用程序的功能和灵活性,需要的朋友可以参考下
    2023-09-09
  • 基于java web获取网页访问次数代码实例

    基于java web获取网页访问次数代码实例

    这篇文章主要介绍了基于java web获取网页访问次数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论