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

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进行远程调用的基本使用方法
http://www.xdnf.cn/news/37.html

相关文章:

  • 【音视频开发】第五章 FFmpeg基础
  • 最新Spring Security实战教程(十一)CSRF攻防实战 - 从原理到防护的最佳实践
  • 逻辑回归 (Logistic Regression)
  • 山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字
  • 第五章 SQLite数据库:3、SQLite 常用语法及使用案例
  • requestAnimationFrame 深度理解
  • AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析
  • 【OSCP-vulnhub】GoldenEye
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(20):拾遗 - imgproc 基础操作(下)
  • Linux 防火墙( iptables )
  • 大数据调度组件
  • 10.(vue3.x+vite)div实现tooltip功能(css实现)
  • 华为仓颉编程语言深度解析
  • InfiniBand与RoCEv2负载均衡机制的技术梳理与优化实践
  • 服务(service)管理
  • 探寻Gson解析遇到不存在键值时引发的Kotlin的空指针异常的原因
  • 2025第十七届“华中杯”大学生数学建模挑战赛题目B 题 校园共享单车的调度与维护问题完整思路 模型 代码 结果分享
  • 从零开始 保姆级教程 Ubuntu20.04系统安装MySQL8、服务器配置MySQL主从复制、本地navicat远程连接服务器数据库
  • HTML:表格数据展示区
  • 《理解 Java 泛型中的通配符:extends 与 super 的使用场景》
  • 趣味编程之分布式系统:负载均衡的“雨露均沾“艺术
  • Python数据可视化
  • 1.Axum 与 Tokio:异步编程的完美结合
  • ubuntu docker 创建镜像 报错 dial tcp xxxx read udp xxxx i/o timeout 还有 Forbidden
  • gRPC 介绍及在嵌入式 Linux 下的成功编译及使用详解
  • 网络规划设计之广域网结构设计,6种架构模式对比
  • 观察者模式:从博客订阅到消息队列的解耦实践
  • 01、单片机简介
  • TAS(Thin-Agent服务)的先决条件与安装指南
  • HttpSessionListener 的用法笔记250417