Nacos中Feign的远程调用深入理解

远程调用:nacos|openfen 第1部分:远程调用 1.1 概述 远程调用=服务发现与注册中心 nacos +远程调用方法代码配置文件 1.2 nacos ▶服务端口注册到nacos(服务的注册与发现),只是提供一个服务IP和端口展示的平台,以便被方便调用,没有调用功能(需要本地写调用功能代码)。 方便调用:nacos注册:IP、端口、服务名。调用代码中只需固定:模块服务名 ▶向中间商nacos,固定自己的需求user/product,不用管需求是谁提供:IP端口 配置config文件夹:实现某种功能的代码片段,如调用功能config 阅读详情

微服务模块间通信

微服务是由很多模块组成,但彼此之间又会进行互相调用,那么就会有方法来实现这个api接口进行远程调用,常见的调用方法有restTemplate,还有feign等,但随着使用,我们好像发现,feign的使用会更轻松,代码更可观,也更好的去理解。

RestTemplate

import org.springframework.web.client.RestTemplate;

 @Autowired
    private RestTemplate restTemplate;

我们可以看到这个类是在springframework包下的,所以可以直接引用。

下面我们来看一下restTemplate在使用时的方式:

public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.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.返回
        return order;
    }
getForObject():

更偏向于直接获取响应内容的,因为他直接返回响应实体的body(响应内容)

具体的关于RestTemplate的文章可以去阅读:http://t.csdn.cn/NH2Pl

我们在使用的时候还需要通过url来进行详细的拼接, 这里的usrservice是我们的模块名称,也是服务名称,他是注册在服务的注册中心当中,我们通过负载均衡策略去服务中心进行拉取最后决定选择哪一个服务进行调用。类似于userservice->localhost:8080,这是在本地和服务配置实现的。可以使用eureka和nacos服务注册中心。

这样的代码,肉眼课间的有些混乱和不美观,因此,我们打算使用feign来进行优化远程调用。

Nacos和Feign

Nacos不但是服务注册中心,也是配置中心。

我们在使用nacos,和feign的时候需要先导入依赖:

如果要使用nacos+feign可以直接导入这部分依赖就可以,不想区分就两个服务都导入,当然是你有引入spring-cloud等父依赖的情况下,依赖版本需要配置完整,我这里有依赖继承,可以根据自己的springboot版本来进行修改自己的依赖版本。

         <!-- nacos客户端依赖包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
         <!--nacos的配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
         <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--引入HttpClient依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
        <!--引入feign的统一api-->
        <dependency>
            <groupId>cn.itcast.demo</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0</version>
        </dependency>

orderservice去调用userservice,所以都需要在注册中心进行注册,以及配置相应的日志级别和负载均衡策略,这里可以提供相关的参考来进行自己的配置。

orderservice的application.yml:这里的配置文件,application.name,和cloud.nacos和feign可以参考配置

erver:
  port: 8088
spring:
  datasource:
    url: 
    username: 
    password: 
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
mybatis:
  type-aliases-package: 
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
  
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 负载均衡规则
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称
      - userservice
feign:
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

userservice的yml:

spring:
  application:
    name: userservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
      config:
        file-extension: yaml # 文件后缀名

Nacos服务注册:

Feign的调用架构:

我们把feign的接口提取出来,并且将相关的类和配置都配置好,作为一个模块,供其他模块引入调用。

结合代码实例理解:

通俗来说就是order-service和user-service就是两个出租屋子,他们有自己的锁,但是他们都把钥匙放在feign里了,如果有人需要就去拿着使用,比如说order像进user屋里面溜达溜达,就去feign拿user的钥匙,这样就可以使用这个屋子了。

集合代码:

引入pojo是因为我们使用了这个类所返回对象的方法,和config则是:

注册为bean方法,放进spring容器

下图的启动类会有显示。

UserClient就相当于这个钥匙@FeignClient就相当于声明它是一个钥匙,而对于想要使用这个钥匙的人,比如order-service:

就需要在这个启动类里面去配置:

@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)

这个作用就是springboot去自动扫描容器内的feignclient,就是你要使用出租屋,你得知道钥匙放在哪里吧(@EnableFeignClients),并且要使用哪一把钥匙(clients = UserClient.class)

@EnableFeignClients注解

packages就是你可以指定去配置扫描的包

@EnableFeignClients(basePackages = {"com.test.*"})

,clients也可以去扫名指定的类,前文已经提过。

Feign调用实例

这样服务和启动类配置好之后,springboot启动一扫描就知道,啊,原来我有这些屋子和钥匙可以使用,所以,order在使用user的时候就会变成:

是不是一下清爽了很多。

这里的userClient就是引用我们之前写的feign的包。

因此,我们在使用nacos+feign的时候明显会比之前用restTemplate舒服了很多,希望这篇文章有助于大家理解,如果对你有帮助的话,恳请点个赞鼓励一下哦

SpringBoot+Nacos+feign微服务调用 通过SpringBoot+Feign+Nacos实现服务的声明式调用。 阅读详情

相关推荐

微服务架构: 基于nacos注册中心的Feign微服务远程调用

在微服务架构设计时,微服务之间经常要互相调用接口,常用的调用方式有RPC、HTTP、Feign等。本博客将简单介绍一下如何基于nacos注册中心,使用Feign进行微服务远程调用。本博客中,您将要了解的内容大致如下: 一. 注册中心 在微服务架构中,注册中心的技术选型有Zookeeper、Eureka、Consul、 Nacos等。至于它们之间的区别,不是本博客的重点,感兴趣的小伙伴自行了解。在这里,博客采用阿里的nacos作为注册中。 1.Nacos的安装 naco...

tornyLin的博客 1599

【微服务】分布式组件 Nacos 结合 Feign 的使用

微服务项目中分布式组件 Nocas 和 Feign 的使用

liuwanqing233333的博客 3809

最全面的微服务技术栈——基础篇

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 优点:降低服务耦合,有利于服务升级和拓展缺点:服务调用关系错综复杂分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:微服务的架构特征: 微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

qq_53263107的博客 879

SpringCloudAlibaba微服务

SpringCloudAlibaba微服务 1.构建Nacos服务 (1)下载并安装Nacos 下载链接: https://github.com/alibaba/nacos/releases 选择1.4.1版本进行下载 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M3ufYviU-1622644451127)(C:\Users\沉思\AppData\Roaming\Typora\typora-user-images\1622547399803.png)] 解压Nacos到一

chaochao2113的博客 834

告别Feign!Spring 6原生HttpExchange与Nacos整合的5个优化技巧

本文面向中高级Java工程师,详细介绍了从OpenFeign迁移至Spring 6原生HttpExchange并与Nacos服务发现深度整合的5个核心优化技巧。内容涵盖客户端选型(RestClient与WebClient)、自定义适配器实现与Nacos集成、基于元数据的自定义负载均衡策略、健壮的异常处理与重试机制,以及平滑的灰度发布迁移策略,旨在提升微服务间通信的性能与稳定性。

tea88的博客 510

Feign降级机制深度解析:Fallback与FallbackFactory实战指南

在微服务架构中,服务降级是保障系统高可用的关键技术,用于在依赖服务故障时提供优雅的失败处理。其核心原理是通过预定义的备用逻辑,在远程调用失败时快速响应,避免故障扩散引发雪崩效应。这一机制的技术价值在于提升系统的韧性和用户体验,确保核心业务流程在部分服务不可用时仍能继续运行。典型的应用场景包括电商系统的商品查询、用户信息获取等读操作,以及支付、订单等核心链路的写操作保护。本文聚焦于Spring Cloud Feign框架中的两种降级实现方式:静态降级的Fallback和动态可诊断的FallbackFactor

weixin_34221775的博客 373

黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)

基础篇全部代码和资料已上传到gitee,大家需要可自取: https://gitee.com/da-ji/spring-cloud-learning-notes 点个Star,后续更新高级篇和面试篇不迷路 ⚆_⚆ 本笔记基于: 1、 尚硅谷 2020.3 SpringCloud(H版&alibaba)框架开发教程 2、 黑马 2021.8 SpringCloud*+RabbitMQ+Docker+Redis+搜索+分布式 代码和资料基于: 黑马 2021.8 SpringCloud*+RabbitMQ+

大吉的博客 3万+

深入理解Spring Cloud Feign在后端的应用场景

Spring Cloud Feign作为微服务架构中服务间通信的核心组件,通过声明式编程模型和与Spring Cloud生态的深度集成,显著简化了分布式系统的通信复杂度。本文从第一性原理出发,系统解析Feign的理论基础、架构设计、实现机制,并结合电商、金融等真实场景,阐述其在服务调用、负载均衡、熔断降级、API契约管理等核心场景中的应用价值。同时,通过对比传统通信方式(如RestTemplate),揭示Feign在可维护性、扩展性和开发效率上的优势,最终为技术团队提供从基础使用到高级优化的完整实践指南。

AI架构全栈开发实战笔记 420

黑马SpringCloud微服务课程总结(一)

本文是黑马微服务SpringCloud课程的总结,文章总结内容包括:Ribbon注册中心,Nacos注册中心,Feign远程调用,GateWay网关,微服务保护Sentinel

LUCIAZZZ的博客 1126

为什么Dubbo3调用SpringCloud的Feign接口一直报找不到服务?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,但经过精心筛选和整理,保证每一条解决方案都经过实战验证,真实可靠。

**My Coding Family** 1083

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 582

微服务系列文章

微服务系列(1)- 简单远程调用与接口提供者和消费者 微服务系列(2)- Eureka微服务注册中心 微服务系列(3)- Ribbon负载均衡 微服务系列(4)- Nacos注册中心

兀坐晴窗独饮茶 324

STM32F103C8T6+A4988驱动42步进电机全流程(附接线图+代码解析)

本文详细介绍了使用STM32F103C8T6单片机与A4988驱动模块控制42步进电机的完整流程。内容涵盖硬件接线图解析、电流设置、GPIO驱动代码编写以及细分控制等核心实践,旨在帮助嵌入式开发者和DIY爱好者快速实现精准运动控制,适用于3D打印机、CNC等需要精密定位的项目。

Python的专栏 792

SpringCloud

SpringCloud [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AHUtDBX-1647160769089)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220312143355012.png)] 认识微服务 服务架构演变 · 单体架构 · 简单方便,高耦合度,扩展性差,适合小型项目。例如:学生管理系统 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i

Maybe3230的博客 850

【土壤普查实战】Python+ArcGIS随机森林模型一键生成土壤类型栅格图

本文详细介绍了如何利用Python和ArcGIS结合随机森林模型实现土壤类型栅格图的自动化生成,大幅提升土壤普查效率。通过环境准备、数据预处理、模型构建与调优等关键步骤,帮助用户掌握从样本点生成到最终栅格图输出的完整流程,适用于大面积区域或样本点较多的土壤分类任务。

weixin_29229989的博客 217

Ubuntu下全面解析硬盘健康:从基础检测到性能优化

本文详细介绍了在Ubuntu系统中如何全面监测硬盘健康状态。从安装smartmontools工具、解读SMART关键属性(如重新分配扇区计数、通电时间),到进行性能基准测试(使用dd和fio),最后根据检测结果提供针对性的优化与预警方案,帮助用户有效预防数据丢失并提升硬盘可靠性。

weixin_29223603的博客 287

深⼊理解SpringCloud 相关组件Eureka、Ribbon、Feign、Hystrix、Nacos、Sentinel核心源码

**源码分析**:关注`com.netflix.eureka`包中的`AbstractInstanceRegistry`和`PeerEurekaNode`类,它们负责服务注册信息的存储和节点之间的复制。- **源码分析**:研究`com.alibaba.nacos`包中的`NamingService`和`ConfigService`接口,了解服务注册发现和配置管理的实现。- **源码分析**:研究`feign.Client`接口和`Feign.Builder`类,了解如何创建和使用Feign客户端。

靡不有初,鲜克有终 1343

AUTOSAR从入门到精通-汽车电子电气架构(EEA)

EEA(Electrical/Electronic Architecture),电子电气架构,是首先由德尔福公司提出的,集合汽车的电子电气系统原理设计、中央电器盒的设计、连接器的设计、电子电气分配系统等设计为一体的整车电子电气解决方案的概念。通过EEA的设计,可将动力总成、驱动信息、娱乐信息等车身信息转化为实际的电源分配的物理布局、信号网络、数据网络、诊断、容错、能量管理等的电子电气解决方案。

getusushu的博客 857

详细介绍Springcloud,Springcloud alibaba,dubbo等微服务框架,以及nacos和feign

Spring Cloud是一个基于Spring Boot的微服务框架,提供了一系列的组件和工具,用于构建可靠、弹性、高可用的分布式系统和微服务架构。Spring Cloud Alibaba是Spring Cloud的一个子项目,集成了阿里巴巴的开源组件和工具,提供了更多的选择和灵活性,帮助开发者构建基于阿里巴巴生态系统的微服务应用。我们可以使用Nacos进行服务注册与发现,每个实例在启动时将自己注册到Nacos服务器,并在需要调用其他服务时,可以通过Nacos的服务发现功能获取到其他服务的实例地址。

qq_38366111的博客 954

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2881

实验二 离散控制系统的性能分析(时域/频域)

1.掌握离散闭环系统的动态性能时域参数的分析与计算方法; 2.掌握离散系统稳定性的频域典型参数分析与计算方法。 MATLAB 软件( 2022a); 1.在 Matlab 语言平台上,通过给定的闭环离散系统,深刻理解时域参数的物理意义与计算方法,内容包括如下: 阻尼比参数分析:Z 平面与 S 平面的极点相互转换编程实现;分析 S/Z 两个平面域特殊特性(水平线、垂直线、斜线、圆周等)的极点轨迹相互映射方法;系统阶跃响应参数:上升时间和超调量等。 2. 采用频域分析方法,通过编程计算,进一步理解离散系统的稳定

m0_51738372的博客 2479

深入理解SpringCloud:基础组件

服务注册与发现的基于,常见的如Eureka、Consul、Nacos。

RuiKe的博客 1297

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SpringBoot+SpringCloud+nacos+gateway+mybatis搭建微服务教程

SpringBoot+SpringCloud+nacos+gateway+mybatis搭建微服务教程 【下载地址】SpringBootSpringCloudnacosgatewaymybatis搭建微服务教程 本教程为您提供了SpringBoot、SpringCloud、nacos、gateway和mybatis整合的...

gitblog_06725的博客 363

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Nacos服务发现与注册源码剖析

Nacos&Ribbon&Feign核心微服务架构图 架构原理 1、微服务系统在启动时将自己注册到服务注册中心,同时外发布 Http 接口供其它系统调用(一般都是基于Spring MVC) 2、服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解@FeignClient,Feign会针对 加了该注解的接口生成动态代理,服务消费者会针对 Feign 生成的动态代理去调用方法时,会在底层生成Http协议格式 的请求,类似 /stock/deduct?pr

小强同志的博客 753

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringCloud Gateway视频教程 Sentinel视频教程 Nacos视频教程

Springcloud 视频教程(精华版)目录 精华版:极致简洁、不废话 by 疯狂创客圈 视频地址: 进入学习请点击 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZGdSXvwp-1611236892217)(]) 第1篇 分布式系统与SpringCloud §1:SpringCloud与分布式基础框架简介 问题1:什么是分布式微服务系统? 问题2:大概涉及到哪些组件? §2:为什么RPC原理好多人不了解? 问题1:SpringCloud与Nginx核心知识的重要性,

架构师尼恩 798
上一篇: docker volumes深入理解和数据卷挂载相关指令
下一篇: 分布式CAP定理与Base理论与Love爱情
happystudy_neu
博客等级 码龄4年 1140粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值