当前位置: 首页 > news >正文

Openfein实现远程调用的方法(实操)

文章目录

  • 环境准备
  • 一、URL中接收参数
  • 二、接收一个参数
  • 三、接收多个参数
  • 四、传递对象
  • 五、传递JSON格式数据

环境准备

下面的配置,服务调用方加入即可。

  1. 依赖导入:
        <!--        openfeign依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
  1. 开启Feign功能:

@EnableFeignClients //开启feign功能
@SpringBootApplication
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
  1. 创建Openfeign接口
//假定:被调用服务的名称为product-service,服务的接口路径统一为`product`开头
//path是可加 可不加的,value必须有,用于指定被调用服务
@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {//path可以有可无,使用path,远程调用时,默认会加上path前缀路径
}

做足准备后,接下来我们就可以使用Openfeign来进行远程调用了。


一、URL中接收参数

  1. 假定这是服务提供方的接口:
@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/{productId}")public ProductInfo getProductInfoById(@PathVariable("productId") Integer productId){return productService.selectProductById(productId);}
}
  1. 定义Openfeign接口

@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {//@PathVariable不可省略!把变量申明为url的一部分@RequestMapping("/{productId}")ProductInfo getProductInfo(@PathVariable("productId ") Integer productId);
}

我们发现实际上Openfeign接口的定义和服务提供方Controller接口的定义是非常相似的,这有助于我们去书写Openfeign接口。

  1. 通过Openfeign进行远程调用
    在这里插入图片描述

order是服务调用方的一个接口,意思是查询orderId为1的订单信息。


二、接收一个参数

假定这是服务提供方接口(回显服务):


@RestController
@RequestMapping("/product")
public class ProductController {@RequestMapping("/p1")public String p1(Integer id){return "product-service 接收到参数, id:"+id;}
}

定义Openfeign接口:

//同样地,和服务提供方接口写法类似
@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {@RequestMapping("/p1")String p1(@RequestParam("id")Integer id);//@RequestParam不可省略
}

然后我们写一个测试接口,用Openfeign去调用ProductController的p1方法:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o1")public String o1(Integer id){return productApi.p1(id);}
}

运行结果:
在这里插入图片描述


三、接收多个参数

假定这是服务提供方接口(回显服务):


@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/p2")public String p2(Integer id, String name){return "product-service 接收到参数, id:"+id+",name:"+name;}
}

定义Openfeign接口:

@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {//同样地,@RequestParam都不能够省略@RequestMapping("/p2")String p2(@RequestParam("id")Integer id,@RequestParam("name") String name);
}

然后通过下面的测试接口调用Openfeign接口进行远程调用:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o2")public String o2(Integer id,String name){return productApi.p2(id,name);}
}

运行结果:
在这里插入图片描述

四、传递对象

假定这是服务提供方接口(回显服务):


@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/p3")public String p3(ProductInfo productInfo){return "product-service 接收到参数: productInfo"+productInfo.toString();}}

远程调用接口:


@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {@RequestMapping("/p3")public String p3(@SpringQueryMap ProductInfo productInfo);}

@SpringQueryMap 会把Java对象的字段映射成HTTP 请求的查询参数,同样地,是不可省略的注解

通过Openfeign进行远程调用:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o3")public String o3(){ProductInfo productInfo=new ProductInfo();productInfo.setId(45);productInfo.setProductName("T恤");return productApi.p3(productInfo);}
}

运行结果:
在这里插入图片描述

五、传递JSON格式数据

假定这是我们的服务提供方(回显服务):


@RestController
@RequestMapping("/product")
public class ProductController {@RequestMapping("/p4")public String p4(@RequestBody ProductInfo productInfo){return "product-service 接收到参数: productInfo"+productInfo.toString();}}

定义Openfeign接口:


@FeignClient(value="product-service",path="/product")//FeignClient用于绑定需要调用的服务
public interface ProductApi {@RequestMapping("/p4")public String p4(@RequestBody ProductInfo productInfo);
}

@RequestBody 不可省略,表示接收json格式数据,并且转换成Java对象

通过下面的测试接口,实现远程调用:


@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o4")public String o4(){ProductInfo productInfo=new ProductInfo();productInfo.setId(45);productInfo.setProductName("T恤");return productApi.p4(productInfo);}
}

运行结果:
在这里插入图片描述


以上便是openfeign进行远程调用的基本使用方法

相关文章:

  • 聊一聊接口测试是如何进行的?
  • Vue3如何选择传参方式
  • 虚幻基础:ue引擎的碰撞
  • HTTP/1.1 队头堵塞问题
  • 函数对象-C++
  • Linux 系统的启动流程
  • 树莓派超全系列教程文档--(30)autoboot.txt介绍
  • 2000-2017年各省发电量数据
  • 【Java学习笔记】关键字汇总
  • 嵌入式软件--stm32 DAY 1
  • 每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)
  • 用Prompt 技术【提示词】打造自己的大语言智能体
  • 第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解
  • UEFI Spec 学习笔记---12 - Protocols —CONSOLE SUPPORT(一)
  • 网络安全知识点2
  • 前端api(请求后端)简易template
  • 多模态模型 Grounding DINO 初识
  • HFSS(李明洋)学习记录1
  • 算法:双指针(快慢指针|对撞指针)、快排、模拟、二分、贪心
  • 4月17号
  • 日韩 “打头阵”与美国贸易谈判,汽车、半导体产业忧虑重重
  • 餐饮店直播顾客用餐,律师:公共场所并非无隐私,需对方同意
  • 广州一季度GDP为7532.51亿元,同比增长3%
  • 屋顶上的阳光与火光:战争如何改变了加沙的能源格局
  • 出国留学、来华留学呈现双增新趋势,“00后留学生个性鲜明”
  • 最高法知产庭年度报告:民事案件二审发回重审率持续下降