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

这篇具有很好参考价值的文章主要介绍了【Spring Cloud】如何使用Feign实现远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springcloud远程调用代码,# Spring,spring cloud,java,spring,微服务,spring boot



前言

  • 本次示例代码的文件结构如下图所示。
    springcloud远程调用代码,# Spring,spring cloud,java,spring,微服务,spring boot

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

    springcloud远程调用代码,# Spring,spring cloud,java,spring,微服务,spring boot

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

    springcloud远程调用代码,# Spring,spring cloud,java,spring,微服务,spring boot

  • 此外,Feign 内部还自动实现了 Ribbon 负载均衡。文章来源地址https://www.toymoban.com/news/detail-639537.html

到了这里,关于【Spring Cloud】如何使用Feign实现远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Gateway如何优雅地进行feign调用

    之前写过一篇文章,介绍微服务场景下的权限处理,方案如下: 在实践中,上面的网关选型为Spring Cloud Gateway,所以这里就存在一个问题,即网关如何调用用户服务进行鉴权的问题。 在微服务场景下,服务间的调用可以通过feign的方式,但这里的问题是,网关是reactor模式,即

    2024年02月08日
    浏览(52)
  • SpringCloud Alibaba(一)微服务简介+Nacos的安装部署与使用+Nacos集成springboot实现服务注册+Feign实现服务之间的远程调用+负载均衡+领域划分

    目录 一.认识微服务 1.0.学习目标 1.1.单体架构 单体架构的优缺点如下: 1.2.分布式架构 分布式架构的优缺点: 1.3.微服务 微服务的架构特征: 1.4.SpringCloud 1.5Nacos注册中心 1.6.总结 二、Nacos基本使用安装部署+服务注册 (一)linux安装包方式单节点安装部署 1. jdk安装配置 2. na

    2024年02月09日
    浏览(46)
  • SpringCloud --- Feign远程调用

    先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier 其作用就是帮助我们优雅的实现http请求的发送,解决

    2024年02月05日
    浏览(39)
  • 使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

            Feign是一个声明式的 HTTP客户端框架 ,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。         Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下,在微服务

    2024年02月15日
    浏览(40)
  • SpringCLoud——Feign的远程调用

    来看一下之前我们使用RestTemplate调用时编写的Contrriller代码: //        2. 利用RestTemplate发起HTTP请求 //        2.1 url 地址         String url = \\\"http://userserver/user/\\\" + order.getUserId(); //        2.2 发送http请求,实现远程调用         User user = restTemplate.getForObject(url,

    2024年02月07日
    浏览(38)
  • SpringCloud(七) Feign远程调用

    目录 一, RestTemplate远程调用存在的问题 二, Feign的远程调用 2.1 什么是Fegin 2.2 Feign的使用(代替RestTemplate) 1. 引入依赖 2. 添加注解  3. 编写Feign的客户端 4. 测试 5. 总结  2.3 自定义配置 1. 配置文件方式  2. Java代码方式  三, Feign使用优化 3.1 使用连接池 1. 引入依赖 2. 配置连接池

    2024年02月06日
    浏览(40)
  • SpringCloud-基于Feign远程调用

    Spring Cloud 是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是 Feign。Feign 是一种声明式的 Web 服务客户端,它简化了在 Spring Cloud 中进行远程调用的过程。本文将介绍如何在 Spring Cloud 中使用 Feign 进行远程调用。 我们在 Spring Cloud 项目的

    2024年02月21日
    浏览(56)
  • 【微服务】SpringCloud之Feign远程调用

    🏡浩泽学编程 :个人主页  🔥 推荐专栏 :《深入浅出SpringBoot》《java对AI的调用开发》               《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 使用Feign远程调用代替RestTemplate远程调用。 使用RestTemplate发起远程调用: 虽然在引

    2024年04月15日
    浏览(31)
  • SpringCloud 核心组件Feign【远程调用&自定义配置】

    目录 1,Feign远程调用 1.1:Feign概述 1.2:Feign替代RestTemplate         1):引入依赖         2):添加注解         3):编写Feign的消费服务,提供服务         4):测试         5):总结 1.3:自定义配置 1.3.1:配置文件方式 1.3.2:Java代码方式 Feign是一款Java语言编写的

    2023年04月08日
    浏览(77)
  • 【SpringCloud Alibaba】(四)使用 Feign 实现服务调用的负载均衡

    在上一文中,我们实现了服务的自动注册与发现功能。但是还存在一个很明显的问题:如果用户微服务和商品微服务在服务器上部署多份的话,之前的程序无法实现服务调用的负载均衡功能。 本文就带着大家一起实现服务调用的负载均衡功能 负载均衡:将原本由一台服务器

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包