【SpringCloud】优雅实现远程调⽤-OpenFeign

OpenFeign

  • [1. RestTemplate存在问题](#1. RestTemplate存在问题)
  • [2. OpenFeign介绍](#2. OpenFeign介绍)
    • [Spring Cloud Feign](#Spring Cloud Feign)
  • [3. 代码获取](#3. 代码获取)

1. RestTemplate存在问题

观察咱们远程调⽤的代码

java 复制代码
    @RequestMapping("/{orderId}")
    public OrderInfo getOrderInfoById(@PathVariable("orderId") Integer id) {
        OrderInfo orderInfo = orderService.getOrderInfoById(id);

        // String url = "http://127.0.0.1:8081/product/" + orderInfo.getProductId();
        String url = "http://product-service/product/" + orderInfo.getProductId();
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        orderInfo.setProductInfo(productInfo);
        return orderInfo;
    }

虽说RestTemplate 对HTTP封装后, 已经⽐直接使⽤HTTPClient简单⽅便很多, 但是还存在⼀些问题.

  1. 需要拼接URL, 灵活性⾼, 但是封装臃肿, URL复杂时, 容易出错.
  2. 代码可读性差, ⻛格不统⼀.

微服务之间的通信⽅式, 通常有两种: RPC 和 HTTP.

在SpringCloud中, 默认是使⽤HTTP来进⾏微服务的通信, 最常⽤的实现形式有两种:

  • RestTemplate
  • OpenFeign

RPC(Remote Procedure Call)远程过程调⽤,是⼀种通过⽹络从远程计算机上请求服务,⽽不需要了解底层⽹络通信细节。RPC可以使⽤多种⽹络协议进⾏通信, 如HTTP、TCP、UDP等, 并且在TCP/IP⽹络四层模型中跨越了传输层和应⽤层。简⾔之RPC就是像调⽤本地⽅法⼀样调⽤远程⽅法

2. OpenFeign介绍

OpenFeign 是⼀个声明式的 Web Service 客⼾端. 它让微服务之间的调⽤变得更简单, 类似controller 调⽤service, 只需要创建⼀个接⼝,然后添加注解即可使⽤OpenFeign.

OpenFeign 的前⾝

可以简单理解为 Netflix Feign 是OpenFeign的祖先, 或者说OpenFeign 是Netflix Feign的升级版. OpenFeign 是Feign的⼀个更强⼤更灵活的实现.

Spring Cloud Feign

Spring Cloud Feign 是 Spring 对 Feign 的封装, 将 Feign 项⽬集成到 Spring Cloud ⽣态系统中.

受 Feign 更名影响,Spring Cloud Feign 也有两个 starter

  • spring-cloud-starter-feign
  • spring-cloud-starter-openfeign

由于Feign的停更维护, 对应的, 我们使⽤的依赖是 spring-cloud-starter-openfeign

3. 代码获取

gitee仓库

相关推荐
Yvemil77 分钟前
SpringBoot中间件Docker
spring boot·后端·中间件
joker_zsl10 分钟前
Django makemigrations时出现TypeError: ‘module‘ object is not iterable
后端·python·django
新智元28 分钟前
ChatGPT幕后大佬、o1推理模型作者官宣离职!OpenAI大洗牌,后训练团队换将
前端·人工智能·后端
Pandaconda43 分钟前
【计算机网络 - 基础问题】每日 3 题(三十二)
开发语言·网络·经验分享·笔记·后端·计算机网络·面试
Stack Stone2 小时前
基于 Spring Boot + Quartz 实现定时任务持久化配置
java·spring boot·后端
test6383 小时前
手写简单线程池
后端·面试
探路3 小时前
狂肝两周,写了一个"本地化"的桌面端工具:超级待办
前端·vue.js·后端
码农小旋风3 小时前
什么是词嵌入(Word Embedding)
后端
Slow菜鸟3 小时前
SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置)
spring boot·分布式·后端
乌南竹3 小时前
Spring Boot应用开发
spring