Feign入门讲解

2024-09-07 20:12
文章标签 讲解 入门 feign

本文主要是介绍Feign入门讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.引入

之前在讲解服务之间的远程调用的时候都是用RestTemplate来发送HTTP请求,但这种方式显得比较冗余,不方便维护,所以现在使用Feign来代替这种方式

  • Feign是一个声明式HTTP客户端,专门用来发送HTTP请求

2.快速入门

2.1.引入依赖

  <!--feign的客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

注意:Feign版本高于Hoxton.M2 RELEASED版本之后不再使用ribbon作为负载均衡器,而是使用loadbalancer,所以还要引入以下依赖:

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

不仅要引入loadbalancer依赖,还要在Nacos依赖中排除ribbon的依赖,如下:

  <!--nacos客户端依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions></dependency>

2.2.开启Feign客户端

引入依赖之后,需要在启动类添加注解来开启Feign客户端,并且把它注册到spring中

2.3.编写接口

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient("userService")
public interface UserClients {@GetMapping("/user/{id}")User findById(@PathVariable Long id);
}
  • 在这个接口中,首先需要一个@FeignClient注解,用来表明远程调用的服务名称
  • 在接口中编写一个方法,这个方法就是远程调用userService服务的方法,其样式和controll接口中的格式基本一致,要表明调用的路径,这里返回值是User实体类,表明调用之后获取的数据就封装到User中

2.4.调用接口

  • 注入刚刚编写的接口
  • 用feign远程调用就是调用接口中的方法(下面的第二步)
    @Autowiredprivate UserClients userClients;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.用feign远程调用User user = userClients.findById(order.getUserId());// 3.把user对象封装到order中order.setUser(user);// 4.返回return order;
}

 2.5.小结

这样一对比,以往的RestTemplate,不仅把url暴露在外面,而且路径一长就不好维护了,而这个feign不仅把路径统一管理在接口中,而且不暴露url,可维护性更高

 3.实现Feign的最佳实践

假如有多个服务都需要远程调用user-service这个服务,那每次都在服务里编写UserClient显得就很麻烦,那么此时我们就可以把这个UserClient抽出来,放到另外一个专门用来存放Client的服务中,别的服务要用的时候,只需要把依赖导入进去就可以了

原来的模式: 

 现在的模式:

 

接下来讲讲如何实现 

feign-api目录 

把order-service中的clients包里的UserClients接口和pojo包里的User类移动到这个新建的服务中,然后引入feign的依赖

 <!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

现在有了单另的专门存放Client的服务,那就把原来的服务中的对应的部分删除掉,具体删的就是存放进feign-api中的部分

注意: 

这个时候项目可能会报错,说无法用@Autowired注入UserClient接口,说没有相应的bean,这个时候就要注意了,我们在上面的2.2小节中讲到@EnableFeignClients不仅有开启feign的功能,并且有这个注解后这个接口就可以被spring扫描到,并创建对应的bean

  • 而在order-service服务中,spring默认扫描的包是启动类所在的包,而在这个包里可没有UserClient,他已经被移到feign-api这个服务里了,所以我们现在要让spring扫描到这个UserClient可以这么做: 
  • 在@EnableFeignClients后面添加配置,指定其扫描UserClient这个接口

 

这篇关于Feign入门讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146047

相关文章

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

MySQL连表查询之笛卡尔积查询的详细过程讲解

《MySQL连表查询之笛卡尔积查询的详细过程讲解》在使用MySQL或任何关系型数据库进行多表查询时,如果连接条件设置不当,就可能发生所谓的笛卡尔积现象,:本文主要介绍MySQL连表查询之笛卡尔积查... 目录一、笛卡尔积的数学本质二、mysql中的实现机制1. 显式语法2. 隐式语法3. 执行原理(以Nes

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二