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

OpenFeign-快速使用-连接池-使用的最佳方案-日志配置

OpenFeign

我们利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了:

其实远程调用的关键点就在于四个:

  • 请求方式

  • 请求路径

  • 请求参数

  • 返回值类型

所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理帮我们生成远程调用的代码,而无需我们手动再编写,非常方便。

接下来,我们就通过一个快速入门的案例来体验一下OpenFeign的便捷吧。

快速入门

我们以cart-service中的查询我的购物车为例。因此下面的操作都是在cart-service中进行。

引入依赖

cart-service服务的pom.xml中引入OpenFeign的依赖和loadBalancer依赖:

  <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

启用OpenFeign

接下来,我们在cart-serviceCartApplication启动类上添加注解,启动OpenFeign功能:

编写OpenFeign客户端

cart-service中,定义一个新的接口,编写Feign客户端:

其中代码如下:

@FeignClient("item-service")
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}

这里只需要声明接口,无需实现方法。接口中的几个关键信息:

  • @FeignClient("item-service") :声明服务名称

  • @GetMapping :声明请求方式

  • @GetMapping("/items") :声明请求路径

  • @RequestParam("ids") Collection<Long> ids :声明请求参数

  • List<ItemDTO> :返回值类型

有了上述信息,OpenFeign就可以利用动态代理帮我们实现这个方法,并且向http://item-service/items发送一个GET请求,携带ids为请求参数,并自动将返回值处理为List<ItemDTO>

我们只需要直接调用这个方法,即可实现远程调用了。

使用FeignClient

最后,我们在cart-service的实现类中改造代码,直接调用ItemClient的方法:

重要代码:

private final ItemClient itemClient;
List<ItemDTO> items = itemClient.queryItemByIds(itemIds);

相关文章:

  • 9.30今日错题解析(软考)
  • MongoDB 工具包安装(mongodb-database-tools)
  • VMware虚拟机连接公网,和WindTerm
  • 蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)
  • 谁懂啊!ITIL认证的五大好处
  • 使用 C++ 实现卷积运算:从理论到实践的详细指南
  • 加密解密的艺术:探索Java中的DES算法
  • 关于BSV区块链覆盖网络的常见问题解答(上篇)
  • 为VRoidStudio制作的vrm格式模型制作blendshape
  • 【Linux实践】实验五:用户和组群账户管理
  • [极客大挑战 2019]RCE ME1
  • 计算机毕业设计 Java教务管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • React返回上一个页面,会重新挂载吗
  • 微信小程序-数据模型与动态赋值
  • 【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CentOS6 编译安装 redis-3.2.3
  • JavaScript 奇技淫巧
  • Javascript弹出层-初探
  • Java精华积累:初学者都应该搞懂的问题
  • JSONP原理
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • springMvc学习笔记(2)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • webpack4 一点通
  • 阿里研究院入选中国企业智库系统影响力榜
  • 代理模式
  • 动态规划入门(以爬楼梯为例)
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 实现简单的正则表达式引擎
  • 使用docker-compose进行多节点部署
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习ES6 变量的解构赋值
  • 最近的计划
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # 数据结构
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (11)(2.1.2) DShot ESCs(四)
  • (MATLAB)第五章-矩阵运算
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)php投票系统 毕业设计 121500
  • (三)c52学习之旅-点亮LED灯
  • (算法二)滑动窗口
  • (一)RocketMQ初步认识
  • (已解决)什么是vue导航守卫
  • .chm格式文件如何阅读
  • .NET C# 配置 Options
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes