SpringCloud中的@EnableDiscoceryClient和@EnableFeignClients注解的作用解析、RPC远程过程调用

        

目录

@EnableDiscoveryClient

服务发现的核心概念

服务注册中心

@EnableDiscoveryClient注解的作用

服务心跳健康检查

使用示例

@EnableFeignClients

Feign简介

@EnableFeignClients注解的作用

RPC(Remote Procedure Call)

参考链接


Spring Cloud 为开发人员提供了构建分布式系统中一些常见的组件。它的两个强大的注解@EnableDiscoveryClient和@EnableFeignClients简化了微服务架构中的服务注册、发现和通信。 

@EnableDiscoveryClient

服务发现的核心概念

  • 服务注册表:服务在启动时进行自我注册的数据存储表。这是服务之间相互寻找的存储数据的容器。
  • 服务提供者:在启动时注册其服务,并在关闭时取消注册的服务。
  • 服务使用者:查询注册表以发现和调用其他服务。

服务注册中心

        服务注册中心是微服务架构中的一个关键组件,它用于管理所有的服务实例。服务注册中心提供了一个服务注册表,其中包含了所有可用的服务实例信息,包括服务的名称、地址、端口等信息。当一个服务实例启动时,它会向注册中心注册自己的信息,当一个服务需要调用其他服务时,它可以通过服务注册中心获取到其他服务的信息,然后进行调用。

@EnableDiscoveryClient注解的作用

        @EnableDiscoveryClient 注解是 Spring Boot 应用程序注册到服务注册中心的关键注解。通过使用这个注解,我们可以轻松地将 Spring Boot 应用程序注册到 Eureka 注册中心中,并且可以实现自动的服务发现和负载均衡。在实际项目中,使用 @EnableDiscoveryClient 注解可以使我们的微服务架构更加灵活和可靠。

服务心跳健康检查

        服务发现的一个重要功能是跟踪服务运行状况的能力。当服务向发现服务器注册时,它会定期发送心跳以表明它仍然存在并正常运行。如果服务器停止接收这些心跳(可能是由于服务崩溃或网络问题),它会将服务标记为关闭并将其从可用服务列表中删除。

使用示例

        导入springcloud及nacos相关依赖到pom文件中

            <!-- spring colud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${com.alibaba.cloud}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

         编写配置文件声明服务名称及nacos注册中心地址

server:port: 51803
spring:application:name: leadnews-wemediacloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: yml

         在微服务启动类上添加@EnableDiscoveryClient注解

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

        为了简化配置管理,此后可以通过网页访问nacos注册中心添加leadnews-wemedia相关配置 :启动虚拟机开启Docker,启动nacos容器,访问192.168.200.130:8848。添加配置信息

        在nacos中配置相关信息后可以在对应服务中使用相关配置,如Kafka、MySQL等,便于统一管理配置文件。

@EnableFeignClients

Feign简介

        Feign 是一个声明式的 REST 客户端,它的目的就是让 REST 调用更加简单。Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。

        而且 Feign 会完全代理 HTTP 请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Spring Cloud 对 Feign 进行了封装,使其支持 SpringMVC 标准注解和 HttpMessageConverters。Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡,与 Hystrix 组合使用,支持熔断回退。

        如果你没有使用 Spring Cloud,那么可以直接用原生的 Feign 来调用 API,如果你使用了 Spring Cloud,可以直接用 Spring Cloud OpenFeign 来调用 API。

@EnableFeignClients注解的作用

        使用 @EnableFeignClients 简化服务间通信:在微服务范式中,服务通常需要相互通信。在许多系统中,这种服务间通信通常通过 HTTP/REST 完成。虽然 Spring 生态系统提供了各种方法来进行这些 HTTP 调用,但 Feign 因其简单和优雅而脱颖而出。

Feign的高级特性及使用示例

        请读者参阅本人另一篇文章:SpringCloud Feign实现微服务间的远程调用(黑马头条Day04)_springcloud 微服务之间调用feignclient-CSDN博客

RPC(Remote Procedure Call)

        RPC(Remote Procedure Call)远程过程调用:用于解决分布式系统中服务之间的调用问题。 通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。

作用:

  1. 屏蔽远程调用和本地调用的区别,让我们感觉就像是调用项目内的方法。
  2. 隐藏底层网络的复杂性,让我们更专注与业务逻辑。

RPC框架重要的三大组件:客服端、服务端、注册中心。

        注册中心主要实现的功能:服务注册、服务发现。

        注意到,RPC中有关键的第一步就是要调用connect去建立TCP连接。既然要连接,那么要拿到对方的IP:port才行吧。如果对方是单机部署就很容易,直接用这个IP:PORT就行了。

        然而,又是可恶的分布式再作怪,对端的服务通常是多机部署的。这时候怎么办,随便找一台机器?那肯定不行,要是这台机器故障了不就完了。再说你只指定一台机器,对方多机部署的意义何在?

        那么这个时候有个第三者就出来了。有个叫服务中心的家伙,手下管理着大量服务的IP列表:

简单的RPC实现的过程:

  • client进行connect连接
  • client序列化req
  • client根据约定的协议编码,向server发送编码后的数据
  • server接收到数据,解码得到方法名和序列化过后的req二进制流
  • server根据方法名找到req的类型,反序列化得到req对象
  • server调用本地方法得到res
  • server序列化res
  • server根据约定的协议编码并发送数据
  • client接收到数据并解码
  • client反序列化得到res

基于HTTP的RESTful接口 VS 基于TCP的RPC协议

        REST(Representational State Transfer)   这是一种HTTP调用的格式,更标准,更通用,无论哪种语言都支持http协议。

        RPC(Remote Promote Call)   一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。

参考链接

Spring Boot 中的 @EnableDiscoveryClient 注解-CSDN博客

怎么理解rpc,既然有http请求了为啥还要用rpc? - 知乎

如何手撸一个较为完整的RPC框架 - 掘金

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

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

相关文章

javaScript——BFS结合队列求迷宫最短路径

这里推荐先去看下B站这个老师讲的BFS迷宫问题&#xff0c;只用看前五分钟就能懂用BFS队列实现的原理。[POJ] 3984 迷宫问题 BFS_哔哩哔哩_bilibili 问题描述&#xff1a;由m*n的矩阵构成了一个迷宫&#xff0c; 矩阵中为1的元素表示障碍物&#xff0c;不能走&#xff0c;为0表示…

如何在职场中提升自己的竞争力

随着社会的发展&#xff0c;职场竞争日益激烈。如何在职场中提升自己的竞争力&#xff0c;成为许多职场人士关注的焦点。本文将从以下几个方面为大家提供一些建议。 一、不断学习&#xff0c;提升专业技能 在职场中&#xff0c;专业技能是衡量一个人竞争力的重要标准。要想在职…

让数据在两个buckets之间传输 - Google Storage Transfer Service

在业务场景中&#xff0c; 有时我们不想直接暴露数据存储空间给上游系统&#xff0c; 而需要设置1个landing Path 让上游系统发送数据 如图&#xff1a; 我们只需grant landing bucket 的权限给上游系统&#xff0c; 而上游系统是访问不了storage bucket的保证了数据隔离 但是…

这个小技巧真不错!

大家好&#xff0c;我是前端队长。前端程序员&#xff0c;2023年开始玩副业。玩过AI绘画&#xff0c;公众号爆文项目&#xff0c;累计变现五位数。 今天看到萌萌在陪伴群分享了我公众号次图封面显示不全的问题。 这里我分享设计师萌萌的方法&#xff0c;很简单&#xff0c;但是…

为什么HubSpot可以干翻营销和销售副总裁?

本文纯属虚构&#xff0c;作为销售的人&#xff0c;看完惊出一身大汗绝对属于正常。建议您先准备一个大毛巾&#xff0c;等下看完肯定会出汗的。还有&#xff0c;别忘记睡前给自己倒满一杯红酒&#x1f377;&#xff0c;今晚会失眠的呢。 1. 为什么是Hubspot&#xff1f; 2. H…

金融知识分享系列之:KD指标

金融知识分享系列之&#xff1a;KD指标 一、KD指标二、KD指标计算三、KD指标原理四、KD指标应用 一、KD指标 KD信号提供入场的工具 名称&#xff1a;随机震荡指标参数&#xff1a;&#xff08;9,3,3&#xff09;组成&#xff1a;K线&#xff0c;D线&#xff0c;20轴&#xff0…

【Linux】传输层协议:TCP/UDP

目录 netstat pidof UDP协议 TCP协议 TCP协议段格式 TCP协议的相关机制 确认应答&#xff08;ACK&#xff09;机制 超时重传机制 连接管理机制 服务端状态转换 客户端状态转化 流量控制 流量控制常见问题&#xff1a; 滑动窗口 拥塞控制 延迟应答 面向字节流…

流畅的 Python 第二版(GPT 重译)(九)

第四部分&#xff1a;控制流 第十七章&#xff1a;迭代器、生成器和经典协程 当我在我的程序中看到模式时&#xff0c;我认为这是一个麻烦的迹象。程序的形状应该只反映它需要解决的问题。代码中的任何其他规律性对我来说都是一个迹象&#xff0c;至少对我来说&#xff0c;这表…

(day 14)JavaScript学习笔记(对象2)

概述 这是我的学习笔记&#xff0c;记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript&#xff0c;那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象&#xff0c;主要是this、getters和setters、原型&#…

vulhub中DNS域传送漏洞复现

DNS协议支持使用axfr类型的记录进行区域传送&#xff0c;用来解决主从同步的问题。如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源&#xff0c;将会导致DNS域传送漏洞。 环境搭建 Vulhub使用Bind9来搭建dns服务器&#xff0c;但不代表只有Bind9支持AXFR记录。运行…

Power BI学习(数据可视化)

另一个也可以的工具是&#xff1a;Tableau 还有一个是&#xff1a;神策&#xff0c;主要是用于互联网的app的数据埋点 数据分析的过程&#xff1a; 数据源--数据清洗&#xff08;power query&#xff09;-构建指标 新建度量值&#xff08;power pivot&#xff09;-可视化&…

构建一个前端智能停车可视化系统

引言 随着城市化进程的加速&#xff0c;停车难问题日益突出。智能停车可视化系统通过实时展示停车场的车位信息&#xff0c;帮助用户快速找到空闲车位&#xff0c;提高停车效率。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 2. 安装依赖 3. 创建停车场组件 4. 集…

MAC IntelliJ IDEA搭建Doris Fe

目录 版本信息 安装环境依赖 拉取源码 下载 Doris 编译依赖 修改系统最大文件句柄数 编译 Doris 配置 Debug 环境 生成 FE 代码 FE模块代码导入 配置 Debug FE 启动 FE 报错问题 版本信息 本次安装的doris版本信息为doris-2.1.0-rc11 IntelliJ IDEA 配置jdk17、m…

数据之王国:解析Facebook的大数据应用

引言 作为全球最大的社交媒体平台之一&#xff0c;Facebook拥有庞大的用户群体和海量的数据资源。这些数据不仅包括用户的个人信息和社交行为&#xff0c;还涵盖了广告点击、浏览记录等多方面内容。Facebook通过巧妙地利用这些数据&#xff0c;构建了强大的大数据应用系统&…

Web框架开发-Django模型层(数据库操作)

一、ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动ORM是“对象-关系-映…

拌合楼管理系统(八) c#海康威视摄像头车牌识别

前言: c#调用海康威视SDK实现车牌识别 原本以为海康威视sdk的Demo里面没有车牌识别的实例,后来发现自己肤浅了,官方是有提供的,只是车牌识别是通过安防布警的方式实现的.程序主动监听,触发告警后获取到车牌信息. 一、接口调用的流程&#xff1a; 首先初始化sdk -> 开…

SQLiteC/C++接口详细介绍sqlite3_stmt类(四)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;三&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;五&#xff09; 7. sqlite3_bind_parameter_count函数 sqlite3_bind_param…

流畅的 Python 第二版(GPT 重译)(十一)

第二十章&#xff1a;并发执行器 抨击线程的人通常是系统程序员&#xff0c;他们心中有着典型应用程序员终其一生都不会遇到的用例。[…] 在 99%的用例中&#xff0c;应用程序员可能会遇到的情况是&#xff0c;生成一堆独立线程并将结果收集到队列中的简单模式就是他们需要了解…

Java newInstance方法学习

用newInstance与用new是有区别的&#xff0c;区别在于创建对象的方式不一样&#xff0c;前者是使用类加载机制&#xff1b; newInstance方法要求该 Class 对应类有无参构造方法&#xff1b; 执行 newInstance()方法实际上就是使用对应类的无参构造方法来创建该类的实例&#x…

YOLOV4-车道线检测-车距离预测

1.前言 最近在看华为的CANN框架&#xff0c;发现了一些很有意思的开源算法(本文所有的代码都出自华为开源git发布的代码)&#xff0c;华为最近出了AI PRO开发板&#xff0c;想着现在开发板上用用(不想重新配置环境了&#xff0c;麻烦还累)&#xff0c;看着代码有onnx的模型&…