文章目录RestTemplate 存在问题OpenFeign 介绍OpenFeign 前身Spring Cloud Feign快速上手引入依赖添加注解编写 OpenFeign 的客户端远程调用测试RestTemplate 存在问题观察我们远程调用的代码publicOrderInfoselectOrderById(IntegerorderId){OrderInfoorderInfoorderMapper.selectOrderById(orderId);Stringurlhttp://product-service/product/orderInfo.getProductId();ProductInfoproductInforestTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);returnorderInfo;}虽说RestTemplate对HTTP封装之后已经比直接使用HTTPClient要简单方便很多但是还是存在一些问题需要拼接URL灵活性高但是封装臃肿URL复杂时容易出错代码可读性差风格不统一微服务之间的通信方式通常有两种RPC和HTTP在Spring Cloud中默认是使用HTTP来进行微服务的通信最常用的实现形式有两种RestTemplateOpenFeignRPCRemote Procedure Call远程过程调用是一种通过网络从远程计算机上请求服务而不需要了解底层网络通信机制RPC可以使用多种网络协议进行通信如HTTP、TCP、UDP等并且在TCP/IP网络四层模型中跨越了传输层和应用层简而言之RPC就是像调用本地方法一样调用远程方法常见的RPC框架有DubboThriftgRPCOpenFeign 介绍OpenFeign是一个声明式的Web Service客户端。它让微服务之间的调用变得更简单类似controller调用service只需要创建一个接口然后添加注解即可使用OpenFeignOpenFeign 前身Feign是NetFlix公司开源的一个组件可以简单理解为NetFlix Feign是OpenFeign的祖先或者说OpenFeign是NetFlix Feign的升级版是一个更强大更灵活的实现现在网络上看到的文章或者公司用的Feign大多都是OpenFeign我们后面讲说的Feign指的是OpenFeignSpring Cloud FeignSpring Cloud Feign是Spring对Feign的封装将Feign项目继承到Spring Cloud生态系统中。受Feign更名影响Spring Cloud Feign也有两个starterspring-cloud-starter-feignspring-cloud-starter-openfeign由于Feign的停更维护对应的我们使用的依赖是 spring-cloud-starter-openfeign快速上手引入依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency添加注解在order-service的启动类添加注解EnableFeignClientsEnableFeignClientsSpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,args);}}编写 OpenFeign 的客户端基于SpringMVC的注解来声明远程调用的信息importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;FeignClient(valueproduct-service,path/product)publicinterfaceProductApi{RequestMapping(/{productId})ProductInfogetProductById(PathVariable(productId)IntegerproductId);}FeignClient注解作用在接口上参数说明name/value指定FeignClient的名称也就是微服务的名称用于服务发现Feign底层会使用Spring Cloud LoadBalance进行负载均衡。也可以使用url属性指定一个具体的urlpath定义当前FeignClient的统一前缀远程调用修改远程调用的方法publicclassOrderService{//...AutowiredprivateProductApiproductApi;//...// Feign 实现远程调用publicOrderInfoselectOrderById(IntegerorderId){OrderInfoorderInfoorderMapper.selectOrderById(orderId);ProductInfoproductInfoproductApi.getProductById(orderInfo.getProductId());orderInfo.setProductInfo(productInfo);returnorderInfo;}}代码对比测试启动服务访问接口测试远程调用http://127.0.0.1:8080/order/1可以看出来使用Feign也可以实现远程调用Feign简化了与HTTP服务交互的过程把REST客户端的定义转换为Java接口并通过注解的方式来声明请求参数请求方式等信息使远程调用更加方便和间接
[SpringCloud][13]OpenFeign快速上手
发布时间:2026/6/14 20:21:39
文章目录RestTemplate 存在问题OpenFeign 介绍OpenFeign 前身Spring Cloud Feign快速上手引入依赖添加注解编写 OpenFeign 的客户端远程调用测试RestTemplate 存在问题观察我们远程调用的代码publicOrderInfoselectOrderById(IntegerorderId){OrderInfoorderInfoorderMapper.selectOrderById(orderId);Stringurlhttp://product-service/product/orderInfo.getProductId();ProductInfoproductInforestTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);returnorderInfo;}虽说RestTemplate对HTTP封装之后已经比直接使用HTTPClient要简单方便很多但是还是存在一些问题需要拼接URL灵活性高但是封装臃肿URL复杂时容易出错代码可读性差风格不统一微服务之间的通信方式通常有两种RPC和HTTP在Spring Cloud中默认是使用HTTP来进行微服务的通信最常用的实现形式有两种RestTemplateOpenFeignRPCRemote Procedure Call远程过程调用是一种通过网络从远程计算机上请求服务而不需要了解底层网络通信机制RPC可以使用多种网络协议进行通信如HTTP、TCP、UDP等并且在TCP/IP网络四层模型中跨越了传输层和应用层简而言之RPC就是像调用本地方法一样调用远程方法常见的RPC框架有DubboThriftgRPCOpenFeign 介绍OpenFeign是一个声明式的Web Service客户端。它让微服务之间的调用变得更简单类似controller调用service只需要创建一个接口然后添加注解即可使用OpenFeignOpenFeign 前身Feign是NetFlix公司开源的一个组件可以简单理解为NetFlix Feign是OpenFeign的祖先或者说OpenFeign是NetFlix Feign的升级版是一个更强大更灵活的实现现在网络上看到的文章或者公司用的Feign大多都是OpenFeign我们后面讲说的Feign指的是OpenFeignSpring Cloud FeignSpring Cloud Feign是Spring对Feign的封装将Feign项目继承到Spring Cloud生态系统中。受Feign更名影响Spring Cloud Feign也有两个starterspring-cloud-starter-feignspring-cloud-starter-openfeign由于Feign的停更维护对应的我们使用的依赖是 spring-cloud-starter-openfeign快速上手引入依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency添加注解在order-service的启动类添加注解EnableFeignClientsEnableFeignClientsSpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,args);}}编写 OpenFeign 的客户端基于SpringMVC的注解来声明远程调用的信息importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;FeignClient(valueproduct-service,path/product)publicinterfaceProductApi{RequestMapping(/{productId})ProductInfogetProductById(PathVariable(productId)IntegerproductId);}FeignClient注解作用在接口上参数说明name/value指定FeignClient的名称也就是微服务的名称用于服务发现Feign底层会使用Spring Cloud LoadBalance进行负载均衡。也可以使用url属性指定一个具体的urlpath定义当前FeignClient的统一前缀远程调用修改远程调用的方法publicclassOrderService{//...AutowiredprivateProductApiproductApi;//...// Feign 实现远程调用publicOrderInfoselectOrderById(IntegerorderId){OrderInfoorderInfoorderMapper.selectOrderById(orderId);ProductInfoproductInfoproductApi.getProductById(orderInfo.getProductId());orderInfo.setProductInfo(productInfo);returnorderInfo;}}代码对比测试启动服务访问接口测试远程调用http://127.0.0.1:8080/order/1可以看出来使用Feign也可以实现远程调用Feign简化了与HTTP服务交互的过程把REST客户端的定义转换为Java接口并通过注解的方式来声明请求参数请求方式等信息使远程调用更加方便和间接