• OpenFeign使用案例


    一 OpenFeign概述

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

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

    项目中源码

    二 使用步骤

    2.1 feign接口模块

    单独将feign接口放在模块中,方便后续为各个服务使用。
    在这里插入图片描述

    2.1.1 依赖配置

    springCloud版本使用

        <properties>
            <java.version>1.8java.version>
            <spring-cloud.version>Hoxton.SR6spring-cloud.version>
            <spring-cloud-alibaba.version>2.2.1.RELEASEspring-cloud-alibaba.version>
        properties>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
            dependency>
        dependencies>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-dependenciesartifactId>
                    <version>${spring-cloud.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
                <dependency>
                    <groupId>com.alibaba.cloudgroupId>
                    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                    <version>${spring-cloud-alibaba.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2.3 测试

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

    http://localhost:8080/consumer/depart/save
    在这里插入图片描述
    三 扩展
    Spring Cloud OpenFeign

  • 相关阅读:
    Prometheus 查询持久化
    Flink-CDC-快速入手(MySQL为例)
    [CF Gym101196-I] Waif Until Dark 网络最大流
    常见IO模型(非常详细)
    多御安全浏览器chromium95内核更新:上网速度更快
    C++ 友元
    【查找算法】——二分查找
    ubuntu 安装 opencv 【亲测有效】
    保姆级教程——VSCode如何在Mac上配置C++的运行环境
    Spring Cloud 因为请求上游接口,没设置超时时间导致的服务雪崩
  • 原文地址:https://blog.csdn.net/weixin_43811057/article/details/126662596