【Spring Cloud】如何使用Feign实现远程调用

news2024/9/21 0:42:55

本期目录

  • 前言
  • 1. 导入依赖坐标
  • 2. 开启Feign自动装配
  • 3. 声明远程调用
  • 4. 替代RestTemplate
  • 5. 测试



前言

  • 本次示例代码的文件结构如下图所示。
    在这里插入图片描述

1. 导入依赖坐标

  • order-servicepom.xml 文件中导入 Feign 的依赖坐标。

    <!-- Feign远程调用客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    

2. 开启Feign自动装配

  • order-service 的启动类上添加注解 @EnableFeignClients ,以开启 Feign 功能。

    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    @EnableFeignClients
    @Slf4j
    public class OrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
            log.info("订单微服务启动成功");
        }
    
    }
    

3. 声明远程调用

  • Feign 采用了 Spring MVC 的注解的方式发起远程调用。只需要把发 HTTP 请求的信息声明在一个接口中,并添加注解 @FeignClient("微服务名称") ,Feign 就会自动为我们发起 HTTP 请求。通常需要声明的信息如下。

    声明的信息
    微服务名称userservice
    请求方式GET
    请求路径/user/{id}
    请求参数Long id
    返回值类型User
  • 下面的代码示例演示了订单微服务 order-service 向用户微服务 user-service 发起【根据用户 ID 查询用户】的远程调用。

  • clients/UserClient.java

    @FeignClient("userservice")
    public interface UserClient {
    
        @GetMapping("/user/{id}")
        User getById(@PathVariable Long id);
    
    }
    

4. 替代RestTemplate

  • 下面代码示例展示了使用 Feign 之前,使用 RestTemplate 发起远程调用。

    @Service
    public class OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
        // 自动注入RestTemplate,用于发起HTTP请求远程调用
        @Autowired
        private RestTemplate restTemplate;
    
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
            // 2.使用RestTemplate发起HTTP请求,查询订单所属用户信息
            // 2.1 根据查询的订单order中的userId动态生成HTTP请求的url
            String url = "http://userservice/user/" + order.getUserId();
            // 2.2 发送HTTP请求,实现远程调用
            User user = restTemplate.getForObject(url, User.class);
            // 3.把远程调用获得的user封装进order对象中
            order.setUser(user);
            // 4.返回order订单信息
            return order;
        }
        
    }
    
  • 使用 Feign 之后,首先把 UserClient 接口自动注入 OrderService.java ,代码示例如下图所示。

    @Service
    public class OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
        // 自动注入userservice的Feign客户端,用于发起HTTP请求远程调用
        @Autowired
        private UserClient userClient;
    
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
            // 2.使用Feign客户端发起HTTP请求,查询订单所属用户信息
            User user = userClient.getById(order.getUserId());
            // 3.把远程调用获得的user封装进order对象中
            order.setUser(user);
            // 4.返回order订单信息
            return order;
        }
    }
    
  • 通过对比,使用 Feign 远程调用的编程风格非常统一,没有像 RestTemplate 那样还需要定义字符串 URL 。


5. 测试

  • 启动订单微服务 order-service 和 2 个用户微服务 user-service

    image-20230213105023044

  • 测试成功,查询订单时能远程调用用户微服务 user-service 的查询用户方法。

    image-20230213105821465

  • 此外,Feign 内部还自动实现了 Ribbon 负载均衡。

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

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

相关文章

FastAPI(二)路由映射

目录 一、在根目录-新建apps文件夹 二、在apps文件夹下-新建user文件夹和menu文件夹 三、编写API 四、 将子路由导入根路由中 五、改造main.py 六、启动并访问接口文档 一、在根目录-新建apps文件夹 编辑__init__.py文件如下&#xff1a; from fastapi import APIRoute…

动态规划专题——背包问题

&#x1f9d1;‍&#x1f4bb; 文章作者&#xff1a;Iareges &#x1f517; 博客主页&#xff1a;https://blog.csdn.net/raelum ⚠️ 转载请注明出处 目录前言一、01背包1.1 使用滚动数组优化二、完全背包2.1 使用滚动数组优化三、多重背包3.1 使用二进制优化四、分组背包总结…

Spring基础入门(一)之 理论基础概念

文章目录前言Spring 体系结构IOC&DI1.Ioc控制反转2.DI依赖注入3.目标IOC相关之bean1.bean的基础配置2.bean的实例化3.bean的生命周期4.IOC管理第三方beanDI相关之注入注解开发1.介绍2.注解之bean&DI3.注解管理第三方bean4.常见注解的含义AOP1.介绍2.核心概念3.常见注解…

机械革命z2黑苹果双系统改造计划

原来的系统硬盘才256G实在太小了&#xff0c;趁固态便宜搞了一块大华C900Plus-b 1T固态&#xff0c;加上之前电脑里后加的一块海康威视c2000pro 1T准备搞一个winmac双系统生产力工具 黑苹果的详细教程b站上有很多&#xff0c;也可以看下国光师傅的博客&#xff0c;https://app…

webpack打包工具及原理

一、WebpackWebpack 是一个用于现代JavaScript应用程序的静态模块打包工具&#xff0c;可以很方面的管理模块的恶依赖。1.2.1 静态模块此处的静态模块指的是开发阶段&#xff0c;可以被 Webpack 直接引用的资源&#xff08;可以直接被获取打包进bundle.js的资源&#xff09;。当…

上传文件提示java.io.IOException: java.io.FileNotFoundException:(系统找不到指定的路径。)

解决上传文件提示java.io.IOException: java.io.FileNotFoundException&#xff1a;系统找不到指定的路径。前端上传失败效果&#xff1a;后端对应的异常输出信息&#xff1a;此时后端对应的上传关键代码&#xff1a;原因分析&#xff1a;解决方案&#xff1a;transferTo 传入参…

并发设计模式

1、Immutability模式&#xff1a;如何利用不变性解决并发问题&#xff1f;“多个线程同时读写同一共享变量存在并发问题”&#xff0c;这里的必要条件之一是读写&#xff0c;如果只有读&#xff0c;而没有写&#xff0c;是没有并发问题的。解决并发问题&#xff0c;其实最简单的…

【Docker】用开源umami监控你的站点访问量

新年到&#xff0c;祝大家兔年吉祥&#xff01;&#x1f389; 1.介绍 umami是一个开源的站点访问量监看程序&#xff0c;其支持docker部署到自己的服务器上。相比较百度等收费的网站信息监看&#xff0c;这种方式对于小站长来说更加实惠一些 2.docker安装的坑 2.1 docker-co…

附录2-tensorflow目标检测

源码来自作者Bubbliiiing&#xff0c;我对参考链接的代码略有修改&#xff0c;网盘地址 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dvb1 目录 1 参考链接 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_an…

Github每日精选(第100期): 从超过 50 亿的自然语言中获得洞察力ossinsight

介绍 OSS Insight 是一个强大的工具&#xff0c;通过分析超过 5 亿行的 GitHub 事件数据&#xff0c;提供对开源世界的全面、有价值和趋势洞察。 OSS Insight 的Data Explorer提供了一种探索 GitHub 数据的新方法。只需用自然语言提出您的问题&#xff0c;Data Explorer 就会…

PMP应该如何备考?

备考之初的我们&#xff0c;总会四处搜索PMP备考经验&#xff0c;希望能拿到那些高分通关前辈的备考经验和方法。众所周知PMP考试因为有35个学时培训的基本要求&#xff0c;所以肯定是要通过培训机构报名的。 一&#xff0c;首先我们需要了解到新的考纲 1.PMP模块划分发生变化…

开关电源环路稳定性分析(11)——观察法找零极点

大家好&#xff0c;这里是大话硬件。 这篇文章主要是分享如何用观察法直接写出补偿网络中的零极点的表达式。 在前面的文章中&#xff0c;我们分别整理了OTA和OPA型的补偿网络&#xff0c;当时有下面的结论。 针对某个固定的补偿网络&#xff0c;我们可以用数学的方法推导补偿…

2W薪资必备技能 —— Python接口自动化测试

目录 一、基础准备 1. 环境搭建 2. 接口基础知识 2.1 接口分类 2.2 接口请求类型 二、Requests 快速上手 1. requests基础 1.1 发送请求 1.2 参数传递 1.3 接口响应 1.4 接口其他处理 2. requests 高级应用 2.1 会话对象 2.2 请求与响应对象 2.3 准备的请求 2.…

设置软件以管理员权限开机自启动,MemReduct为例

目录 一.MemReduct 1.简介 2.下载方式 二.问题描述 三.具体操作 1.在windows搜索框搜索"任务计划程序" 并打开 2.在右方操作栏点击创建任务 3.常规选项 4.操作选项 5.触发器选项 6.条件选项 7.启动 一.MemReduct 1.简介 支持中文,是一个很方便的内存清理软…

pyTorch下载和cuda下载以及学习笔记

pytorch官方网站&#xff0c;cuda官方网站 CUDA下载&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive CUDNN下载&#xff1a;https://developer.nvidia.com/rdp/cudnn-download pytorch下载&#xff1a;pytorch.org 任务管理器中只显示CUDA占用的专用内存&#…

postman实现接口测试详细教程

各位小伙伴大家好, 今天为大家带来postman实战接口测试详细教程 一、通过接口文档集合抓包分析接口 通过fiddler抓包获取到注册接口URL地址及相关参数数据,并通过接口文档分析接口参数内容及参数说明, 如有必要的依赖条件必须进行梳理, 如token等 Fiddler抓包注册接口请求与…

领英精灵和领英助理哪个好?为什么领英精灵是LinkedIn最好的配套工具?

领英精灵和领英助理哪个好&#xff1f;这是很多使用领英工具的人会问的问题&#xff0c;这2个工具我都有使用过&#xff0c;下面说说我使用后的感受和区别&#xff1a; 公司背景 首先从他们的公司背景看&#xff0c;领英精灵是汇聚了国内领英专家针对领英规则设计的&#xff…

32、基于51单片机红外智能垃圾桶系统设计

摘要 随着现代化进程的日益推进&#xff0c;科技越来越发达&#xff0c;人们的生活水平也提高了&#xff0c;城市化程度越来越高&#xff0c;与此同时也带了许多问题&#xff0c;生活垃圾越来越多垃圾设施却不够完善。无论是在公共场合还是家庭厨房的垃圾大都是没有盖或者有盖…

C语言——指针(进阶详解)

文章目录指针概念的回顾1.字符指针1.1字符指针练习题2.指针数组3.数组指针3.1数组指针的定义3.2 &数组名和数组名的区别3.3数组指针的使用3.4一组简单的练习题4.数组和指针作为函数参数4.1一维数组传参**总结**4.2二维数组传参**总结**4.3一级指针传参**总结**4.4二级指针传…

Spring Boot RCE到内存马探索

前言 SpringBootVulExploit是Spring Boot漏洞Check list&#xff0c;但在真正的环境中进行漏洞利用还是有一段距离的&#xff0c;因此衍生出了SpringBootExploit工具。本文是对该Check list到内存马探索之路的记录。再此过程中学到了很多知识&#xff0c;收获了很多&#xff0…