【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仓库

相关推荐
ashiho3 分钟前
【Spring】RequestParam/PathVariable/RequestBody详解
java·后端·spring·servlet·springmvc
Charlie_Byte10 分钟前
Hugo 相对路径图片显示问题的分析与解决
后端
Charlie_Byte15 分钟前
用 conda 固定默认环境 normal
后端
隐退山林18 分钟前
JavaEE进阶:SpringBoot统一功能处理
java·spring boot·后端
Charlie_Byte19 分钟前
Py 邮件集成与密码重置,并用 Mailpit 测试
后端
Charlie_Byte26 分钟前
Webhook 与飞书机器人集成
后端
源代码•宸41 分钟前
前置准备:架构设计方法论
经验分享·后端
geovindu1 小时前
java: Task Scheduler
java·开发语言·后端
代码不停1 小时前
Spring Boot 配置文件
spring boot·后端
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之多因子认证缓存服务
java·spring·缓存