SpringCloud之OpenFeign的学习、快速上手

1、什么是OpenFeign

OpenFeign简化了Http的开发。在RestTemplate的基础上做了封装,在微服务中的服务调用发送网络请求起到了重要的作用,简化了开发,可以让我们跟写接口一样调其他服务。

并且OpenFeign内置了Ribbon实现负载均衡。

官方文档:Spring Cloud OpenFeign 中文文档 (springdoc.cn)

2、OpenFeign的使用

2.1准备

我们准备了两个微服务,一个商品微服务一个订单微服务。

商品微服务为根据id查询商品详细信息,订单微服务则传入商品id、用户id对商品服务进行调用生成订单。

使用OpenFegin是需要通过注册中心来访问服务的,消费者想通过服务名称调用提供者,就需要注册中心的服务发现功能。

这里我们使用Nacos,Nacos可以参考SpringCloud之Nacos的学习、快速上手-CSDN博客

2.2使用步骤

2.2.1引入依赖

        <!--nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.5.RELEASE</version></dependency><!--feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.5.RELEASE</version></dependency>

在order-service和product-service都引入上面两个依赖

在maven管理中我们可以看到OpenFeign已经集成了负载均衡ribbon

启动Nacos服务

2.2.2application.yml

订单微服务

server:port: 8091    #端口
spring:application:name: order-service    #服务名称cloud:nacos:     #配置nacos服务地址discovery:server-addr: localhost:8848

商品微服务

2.2.3开启OpenFeign

我们需要在消费者的启动类上加上注解@EnableFeignClients

因为我们是在订单服务中调用商品服务,所以我们在订单服务的启动类上加上该注解

@SpringBootApplication
@EnableFeignClients
public class OrderServer {public static void main(String[] args) {SpringApplication.run(OrderServer.class,args);}}

2.2.4业务逻辑

在商品微服务中有个根据商品id查询商品详细信息接口

在订单微服务中则为新增订单        用户下单--->根据商品id获取商品信息---->返回下单信息

商品微服务

订单微服务

2.2.5使用OpenFeign发起请求

定义接口ProductFeignApi

使用注解@FeignClient()中的name属性则为需要调用的服务名称

@FeignClient(name = "product-service")
public interface ProductFeignApi {@RequestMapping("/product/{pid}")Product findByPid(@PathVariable("pid") Long pid);
}

在OrderServiceImpl中调用

@Service
@Slf4j
public class OrderServiceImpl implements IOrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate ProductFeignApi productFeignApi;@Overridepublic Order createOrder(Long productId,Long userId) {log.info("接收到{}号商品的下单请求,接下来调⽤商品微服务查询此商品信息",productId);//远程调⽤商品微服务,查询商品信息Product product = productFeignApi.findByPid(productId);log.info("查询到{}号商品的信息,内容是:{}", productId,JSON.toJSONString(product));//创建订单并保存Order order = new Order();order.setUid(userId);order.setUsername("张三");order.setPid(productId);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderDao.save(order);log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));return order;}
}

2.2.6启动项目测试

为了测试负载均衡我们使用不同端口启动商品服务

右键服务点击复制配置        

输入-Dserver.port=8082以8082端口再开一个商品微服务

清空三个项目的日志

我们访问订单服务的新增接口可以看到商品数据已经正常拿到了

多访问几次,可以看到两个商品服务的控制台都有查询日志的输出,则说明负载均衡也有被使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

69.使用Go标准库compress/gzip压缩数据存入Redis避免BigKey

文章目录 一&#xff1a;简介二&#xff1a;Go标准库compress/gzip包介绍ConstantsVariablestype Headertype Reader 三&#xff1a;代码实践1、压缩与解压工具包2、单元测试3、为何压缩后还要用base64编码 代码地址&#xff1a; https://gitee.com/lymgoforIT/golang-trick/t…

SpringBoot3整合OpenAPI3(Swagger3)

文章目录 一、引入依赖二、使用1. OpenAPIDefinition Info2. Tag3. Operation4. Parameter5. Schema6. ApiResponse swagger2更新到3后&#xff0c;再使用方法上发生了很大的变化&#xff0c;名称也变为OpenAPI3。 官方文档 一、引入依赖 <dependency><groupId>…

汇编语言学习1

Compiler Explorer (godbolt.org) 这个网站可以把我们写的C语言等实时翻译为汇编等语言&#xff0c;便于参考 一个不错的视频讲解 riscv(RISC-V)指令集(MIT) A01 Introduction_哔哩哔哩_bilibili risc-v汇编中&#xff0c;a0, a1, ... 用来传送函数参数&#xff0c;a0, a1用来…

深度解析Python关键字:掌握核心语法的基石(新版本35+4)

目录 关键字 keyword 关键字列表 kwlist softkwlist 关键字分类 数据类型 True、False None 运算类型 and、or、not in is 模块导入 import 辅助关键字 from、as 上下文管理 with 占位语句 pass 流程控制 if、elif、else for while break、continue…

【AI】深度学习在编码中的应用(8)

接上文&#xff0c;本文来梳理和学习智能编码中&#xff0c; 基于残差编码的框架。 智能图像编解码器的成功也推动了智能视频编解码器的发展。传统的视频压缩方法依靠预测编码对运动信息和残差信息分别进行编码。根据时-空域冗余消除方式和阶段不同&#xff0c;现有相关方法可…

字符串操作scanf与gets的区别

在c语言中对于字符串的输入 scanf char str[20]; scanf("%s",str); gets char str[20]; gets(str); 区别&#xff1a; 1. scanf不能获取空格之后的字符串 例如&#xff1a; "how are you" 使用scanf("%s",str)只能获取到 "how&q…

常见异常类及异常对象属性

程序运行的过程中&#xff0c;会发生各种非正常状况&#xff0c;比如程序运行时磁盘空间不足&#xff0c;网络连接中断&#xff0c;被操作的文件不存在。(异常在程序运行时发生)   针对这种情况下&#xff0c;C#程序引入了异常处理机制&#xff0c;通过异常处理机制对程序运行…

第十回 朱贵水亭施号箭 林冲雪夜上梁山-FreeBSD/Linux 控制台基础操作

林冲被众庄客捉住&#xff0c;吊在门楼下&#xff0c;正被打时&#xff0c;柴进来了&#xff0c;赶快把林冲救下来。原来这是柴进打猎用的小庄子&#xff0c; 林冲就把火烧草料场一事跟柴进详细的说了。柴进说兄弟真是命运多磨难啊。林冲住了几日&#xff0c;恐怕连累柴进&…

柠檬微趣面试准备

简单介绍一下spring原理 Spring框架是一个开源的Java应用程序框架&#xff0c;它提供了广泛的基础设施支持&#xff0c;帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等&#xff0c;以促使代…

rust嵌入式之用类函数宏简写状态机定义

笔者一向认为&#xff0c;用有限状态自动机来做硬件控制是最好的选择&#xff0c;同时又倾向于用文本定义来定义状态机是更好的做法。所以此次用rust开发嵌入式自然也是如此。 状态机实现起来很简单&#xff0c;关键是用文本来定义状态机&#xff0c;在rust中&#xff0c;自然…

Laykefu客服系统 任意文件上传漏洞复现

0x01 产品简介 Laykefu 是一款基于workerman+gatawayworker+thinkphp5搭建的全功能webim客服系统,旨在帮助企业有效管理和提供优质的客户服务。 0x02 漏洞概述 Laykefu客服系统/admin/users/upavatar.html接口处存在文件上传漏洞,而且当请求中Cookie中的”user_name“不为…

[学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs

RNN存在信息瓶颈的问题。 注意力机制的核心就是在decoder的每一步&#xff0c;都把encoder的所有向量提供给decoder模型。 具体的例子 先获得encoder隐向量的一个注意力分数。 注意力机制的各种变体 一&#xff1a;直接点积 二&#xff1a;中间乘以一个矩阵 三&#xff1a;…

找不到vcruntime140_1.dll无法继续执行怎么办?全面分析修复方法

当系统提示vcruntime140_1.dll文件出现错误时&#xff0c;可能会引发一系列影响计算机正常运行的问题。这个特定的动态链接库文件&#xff08;DLL&#xff09;是Microsoft Visual C Redistributable的一部分&#xff0c;对于许多基于Windows的应用程序来说至关重要。一旦vcrunt…

如何在供应链管理中有效管理供应商和采购成本

一、管理供应商 在供应链管理中,供应商的管理是至关重要的环节。有效的供应商管理不仅可以确保稳定的原材料供应,还可以降低采购成本,提高企业的竞争力。以下是一些管理供应商的有效方法: 供应商评估与选择在选择供应商之前,企业需要对潜在供应商进行全面的评估。评估标准…

回归预测 | Python基于ALO-BiGRU蚁狮优化算法优化双向BiGRU多变量回归预测+适应度曲线+多个评价指标

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 ALO算法是Mirjalili于2015提出的一种新型元启发式群智能算法。由于引入了随机游走、轮盘赌策略及精英策略&#xff0c;使得 ALO 算法成为一种种群多样、寻优性能强、调节参数少、易于实现的搜索技术 python代码 优化参…

JS之Math

一提到数学&#xff0c;就想到被数学支配的噩梦&#xff0c;只不过这个数学用在了代码当中&#xff0c;那么代码当中的数学对象又是什么样的呢&#xff1f;让我为大家简单介绍一下吧&#xff01; 数学对象常用方法&#xff1a; 常用方法简述ceil向上取整floor向下取整round四舍…

线段树详解

什么是线段树&#xff1f; 1、线段树是一棵二叉搜索树&#xff0c;它储存的是一个区间的信息。 2、每个节点以结构体的方式存储&#xff0c;结构体包含以下几个信息&#xff1a; 区间左端点、右端点&#xff1b;&#xff08;这两者必有&#xff09; 这个区间要维护的信息&…

【leetcode】移除元素

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.暴力求解法二.使用额外数组三.原地修改数组 点击查看题目 一.暴力求解法 若我们不考虑时间复杂度…

【题目】2023年国赛信息安全管理与评估正式赛任务书-模块3 CTF

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块三 网络安全渗透、理论技能与职业素养 竞赛相关资源资料可在文末关注公众号获得 比赛时间及注意事项 本阶段比赛时长为180分钟&#xff0c;时间为9:00-12:00。 【注意事项】 &#xff08;1&#xf…

算法优化:LeetCode第122场双周赛解题策略与技巧

接下来会以刷常规题为主 &#xff0c;周赛的难题想要独立做出来还是有一定难度的&#xff0c;需要消耗大量时间 比赛地址 3011. 判断一个数组是否可以变为有序 public class Solution {public int minimumCost(int[] nums) {if (nums.length < 3) {// 数组长度小于3时&a…