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

--- 使用OpenFeign来优雅的对服务进行调用 ---

微服务之间的调用方法通常是俩种:RPC和http

在spring cloud中使用的是http,通常的实现方法有

RestTemplate OpenFeign

RestTemplate在调用的时候,需要把url写死,还要自己拼接url,还是太麻烦了

而OpenFeign就更方便了,他提供了类似于Controller的服务之间的调用方式,能通过直接在代码代码中使用类来调用方法来进行服务之间的交流

OpenFeign 的使用

引入依赖

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

在启动类上加上@EnableFeignClients注解

在调用类中写调用服务api接口类

对于api类,value表示的的是服务的名字,path是接口的固定路径

他最终的调用提供者的请求url就是这样

完整 URL: http://[240e:398:5dab:d050:562c:179f:4f04:efaa]:8081/product/o4?msg=ro

[240e:398:5dab:d050:562c:179f:4f04:efaa]:8081 这一段是消费者从nacos中获取到的value对应的消费者的ip地址和端口号

而path就对应了 /product

RequestMapping对应的是 /o4

?msg=ro这一段就是通过注解@RequestParam来拼接上的参数msg,若有多个参数也是相同的写法

对应的服务接口

使用openfeign传递多个参数

RequestBody只能有一个而RequestParam可以有多个

消费者接口

openfeign的最佳实践

一 将接口单独提到一个模块中,并将这个模块作为jar下载到本地maven仓库,要使用时添加maven依赖,服务提供者重写接口方法,服务消费者继承这个接口并调用方法

创建一个maven项目,需要导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

将接口写好之后,点maven工具中的install将这个项目作为jar包储存到本地maven仓库中,出现success就成功了,success上的时这个jar包的位置

服务消费者

导入这个jar包的依赖 直接输入jar包类名字他能自动补全 这个version就对应了pom中的

<version>1.0-SNAPSHOT</version> 标签
<dependency><groupId>org.example</groupId><artifactId>bestUse1</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

继承接口

使用接口

服务提供者

引入依赖

<dependency><groupId>org.example</groupId><artifactId>bestUse1</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

实现接口ServerApi

再启动项目调用就行了

二 也可以将

@FeignClient(value = "product-server", path = "/product")

也可以将这段也在接口类中,要导入 openfeign依赖

这样再服务消费者使用时,可以直接使用这个接口,

这段就不需要写了

修改接口 添加上了

@FeignClient(value = "hadage-product",path = "b2")
和依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

服务提供者

服务消费者

启动就行

如果再注入的时候发现爆红线了,那说明时

@EnableFeignClients()

默认的扫描路径没有扫到这个FeignClient类,那么可以修改他的扫描方式

@EnableFeignClients(clients = {ServerApi1.class, Api.class, ServerApi1.class, BestUse1.class})

这样就是指定扫描那几个类,还可以使用basePackages来指定包路径

这个路径值得是src.java包下的

再对项目中的本地依赖打包时是,要吧<scope> 修改为system 表示这个依赖不需要从中央仓库中下载,而是再本地搜索 并添加上对应的位置

end~~~  (*´∀`)~♥

http://www.dtcms.com/a/343866.html

相关文章:

  • vue2怎么修改el-table样式
  • 金融风控AI引擎:实时反欺诈系统的架构设计与实现
  • CTFSHOW | 其他篇题解(二)web417 - web437
  • 进程间通信-IPC机制
  • 【开发日记】SpringBoot 实现支持多个微信小程序的登录
  • 初始数据结构——反射、枚举与Lambda的奇幻冒险
  • 如何理解AP服务发现协议中“如果某项服务需要在多个网络接口上提供,则应为每个网络接口使用一个独立的服务器服务实例。”?
  • 《Linux 网络编程一:网络编程导论及UDP 服务器的创建与数据接收》
  • “我 / 店模式” 靠联盟 + 积分破局,实现三方共赢!
  • 【Oracle】内存管理实战指南:ASMM vs AMM 配置全解析
  • Rust Web开发指南 第一章
  • 服务发现实例和服务实例是不同的
  • 血管介入医疗AI发展最新方向与编程变革:从外周、神经到冠脉的全面解析
  • RabbitMQ面试精讲 Day 27:常见故障排查与分析
  • yggjs_rlayout使用教程 v0.1.0
  • Linux系统之Ubuntu安装cockpit管理工具
  • Jenkins发布spring项目踩坑——nohup java -jar发布后显示成功,但实际jps查询并未运行
  • React 学习笔记1 组件、State
  • 【Tech Arch】Hadoop YARN 大数据集群的 “资源管家”
  • 企业级知识库+智能客服地大模型对比表
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码4(重点)
  • MATLAB启动路径MATLAB202X/bin更改问题
  • 【Python】-- 机器学习项目 - 基于逻辑回归算法的乳腺癌数据集分类
  • 理解AI 智能体:智能体架构
  • DAY14-新世纪DL(DeepLearning/深度学习)战士:破(优化算法)2
  • k8sday14数据存储(2/2)
  • BigData大数据应用开发学习笔记(03)离线处理--数据仓库Hive
  • 直播预约 | CATIA MODSIM SmartCAE带练营第3期:让每轮设计迭代都快人一步!
  • 【C语言16天强化训练】从基础入门到进阶:Day 6
  • 前端查漏补缺