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

openFeign远程调用

  由于RestTemplate的灵活性不是很高因此我们有更好的方法事项远程调用,OpenFeign是一个声明式的Web Services客户端,类似于Controller调用Services,因此灵活性较高。

  提前声明一下,由于Feign有两个starter我们在这里使用的是:spring-cloud-starter-openfeign。

  在使用之前我们需要引入相关依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

     由于此处我们是想要更好的进行”远程调用" 因此我们只需要在调用的一段加入这个依赖就行,服务端就没有必要加入依赖了。

  添加依赖之后我么还需要使用@EnableFeignClients开启openfeign的功能,最后在调用端设置一个接口,这个接口就是进行远程调用的接口,并且在这个接口上添加@FeignClient注解但是任然需要设置一些参数,之后我们会进行介绍。

@FeignClient(value = "product-service",path = "/product")   //进行远程调用
public interface ProductApi {@RequestMapping("/{productId}")ProductInfo getProductById( @PathVariable("productId") Integer productId);
}

  接下来我们对@FeignClient中的参数进行讲解:

 value:表示你想要调用的服务端的namespace,也就是微服务的名称。

 path:定义当前FeignClient的统⼀前缀,也就是表示你想要调用的服务端的类似于作用在类之外的@RestMapping(“##”)中的“##”。

  通过上述方式就可以在客户端进行远程调用,调用服务端product-Service的数据。

  

  openfeign参数传递 

    传递单个参数:

@FeignClient(value = "product-service", path = "/product")
public interface ProductApi {
@RequestMapping("/p1")
String p1(@RequestParam("id") Integer id);
}

    当然这里的@RequestParam并不是必须要添加的,根据响应的情况进行添加。设置之后就可以在调用端中对应的Service引入ProductApi并且调用p1方法就可以或去掉响应的返回值。

    传递多个参数:

     @RequestMapping("/p2")
String p2(@RequestParam("id")Integer id,@RequestParam("name")String name);

    由此我们可以看出传递多个参数和传递单个参数十分相似,当然事实也是这样的,相较于传递单个参数传递多个参数只不过得将参数的个数增加了,其他的并没有什么改变。

    传递对象:

@RequestMapping("/p3")
String p3(@SpringQueryMap ProductInfo productInfo);

    传递对象就和前两者有所不同了 需要使用到@SpringQueryMap注解,使用时我们也就只需要将对象传递进去即可进行远程调用。

  传递Json格式的数据:

@RequestMapping("/p4")
public String p4(@RequestBody ProductInfo productInfo){
return "接收到对象, productInfo:"+productInfo;
}

  传递Json的数据是需要添加@RequestBody注解。

 

 

http://www.xdnf.cn/news/434503.html

相关文章:

  • 需求跟踪矩阵准确性的5大策略
  • 基于vllm-ascend的华为atlas大模型部署
  • OrangePi Zero 3学习笔记(Android篇)8 - OpenOCD
  • 什么是原码和补码
  • 【JavaScript】JavaScript实现大数相乘
  • ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言
  • day013-软件包管理-实战
  • 门禁人脸识别系统详细技术文档
  • 索尼(sony)摄像机格式化后mp4的恢复方法
  • 【基础】Windows开发设置入门2:Windows 终端Windows Terminal
  • FHQ平衡树
  • MCP Server多节点滚动升级一致性治理
  • 怎样将课程表导入手机日历,每天提醒上课?
  • 【Linux系列】dd 命令的深度解析与应用实践
  • Spring框架请求注解
  • 从生产流程到故障处理,R²AIN SUITE 如何为制造业“减负”?
  • Transformer架构介绍+从零搭建预训练模型项目
  • ai讲ping
  • 【C盘空间不足怎么办】
  • git merge和git rebase
  • 科学养生:构建现代健康生活新范式
  • LamaIndex rag(增强检索)入门
  • MySQL:关系模型的基本理论
  • 以价值为导向的精准数据治理实践,赋能业务决策
  • 基于STM32、HAL库的SGTL5000XNLA3R2音频接口芯片驱动程序设计
  • 数据库--处理模型(Processing Model)
  • DCDC输入4.5V-65V耐压 5A电流异步降压芯片SL3075兼容替换TPS54560
  • 【蓝桥杯嵌入式】【复盘】第13届国赛真题
  • 微店根据关键词取商品列表 API 返回值说明
  • 【NextPilot日志移植】params.c解析