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.rhkb.cn/news/280438.html

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

相关文章

企业工商年报注册注销商标注册异常处理小程序开源版开发

企业工商年报注册注销商标注册异常处理小程序开源版开发 1、独立业务模型包括&#xff1a;企业工商年报、企业工商登记注册、企业注销登记、企业异常处理。 2、通用业务模型适合各种业务&#xff0c;比如&#xff1a;商标注册代理、财务会计服务、企业版权登记登。 当然&…

CAPL如何实现TCP Packet的option字段

在TCP协议中,主机可以根据自身的需要决定TCP通信时是否携带option字段,来扩展TCP功能。option字段属于TCP首部的扩展部分,且是可选项,TCP根据首部中的offset字段值确定TCP报文是否携带option字段。 TCP首部固定的部分有20个字节,如果没有扩展部分(option字段),20个字节…

《论文阅读》带边界调整的联合约束学习用于情感原因对提取 ACL 2023

《论文阅读》带边界调整的联合约束学习用于情感原因对提取 前言简介Clause EncoderJoint Constrained LearningBoundary Adjusting损失函数前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Joint Cons…

图像分割论文阅读:Adaptive Context Selection for Polyp Segmentation

这篇论文的主要内容是关于一种用于息肉分割的自适应上下文选择网络&#xff08;Adaptive Context Selection Network&#xff0c;简称ACSNet&#xff09; 1&#xff0c;模型的整体结构 模型的整体结构基于编码器-解码器框架&#xff0c;并且包含了三个关键模块&#xff1a;局部…

spring boot学习第十四篇:使用AOP编程

一、基本介绍 1&#xff0c;什么是 AOP &#xff08;1&#xff09;AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 &#xff08;2&#xff09;利用 AOP…

如何实现跨标签页通讯

什么是跨标签页通讯 同一浏览器&#xff0c;可以打开多个标签页&#xff0c;跨标签页通讯就是&#xff0c;一个标签页能够发消息给另一标签页。 有哪些实现方案 localStorage &#xff08;window.onstorage事件监听&#xff09;BroadcastChannel&#xff08;广播&#xff09…

opengl日记10-opengl使用多个纹理示例

文章目录 环境代码CMakeLists.txt文件内容不变。fragmentShaderSource.fsvertexShaderSource.vsmain.cpp 总结 环境 系统&#xff1a;ubuntu20.04opengl版本&#xff1a;4.6glfw版本&#xff1a;3.3glad版本&#xff1a;4.6cmake版本&#xff1a;3.16.3gcc版本&#xff1a;10.…

图片编辑器中实现文件上传的三种方式和二进制流及文件头校验文件类型

背景 最近在 vue-design-editor 开源项目中实现 psd 等多种文件格式上传解析成模板过程中, 发现搞定设计文件上传没有使用 input 实现文件上传, 所以我研究了一下相关技术, 总结了以下三种文件上传方法 input 文件选择window.showOpenFilePicker 和 window.showDirectoryPicke…

零基础入门数据挖掘系列之「建模调参」

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习如何建模调参&#xff1f;从简单的模型开始&#xff0c;如何去建立一个模型&#xff1b;如何进行交叉验证&#xff1b;如何调节参数优化等。 建模调参&#xff1a;特征工程也好&#xff0c;数据清洗也罢&#xff0c;都是…

python日常刷题(一)

前言&#xff1a;本文记录2024年3月11日至2024年3月19日牛客网所做的基础题目&#xff08;错题本&#xff09;&#xff1a; &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;本专栏&#xff1a;python日常刷题 &#x1f380;CSDN主页&#xff1a;愚润求学 文章目录…

VueUse常见方法使用

npm i vueuse/core 1、useDebounceFn 节流防抖 import { useDebounceFn } from vueuse/core<button type"button" class"search" click"query">查询</button>// 查询 获取table数据const query2 async () > {try {const res …

ETH Gas 之 Base Fee Priority Fee

前情回顾 ETH网络 之 Gas EIP-1559 EIP-1559 EIP-1559是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;&#xff0c;旨在改进以太坊的交易费用机制。该提案引入了一种新的交易费用模型&#xff0c;以提高交易费用的可预测性和网络的效率。我们本文各…

【机器学习】基于果蝇算法优化的BP神经网络分类预测(FOA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】果蝇算法&#xff08;FOA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别4。…

(官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell

前言 查了很多资料都不靠谱&#xff0c;在安装过程中遇到很多的坑&#xff0c;mangoDB 服务重视起不来&#xff1b;出现了很多难以解决的报错&#xff0c;现在把安装过程中遇到的问题&#xff0c;和如何闭坑说一下&#xff0c;很多时候都是准备工作不足导致的&#xff1b;很多方…

TinTin Web3 Bounty 挑战杯开启,Sui 向你发出挑战邀请

以下文章来源于TinTinLand &#xff0c;作者TinTinLand。 2024 年开年最火的是什么&#xff1f; 对 Web3 来说&#xff0c;Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径&#xff01; 通过深入学习各类 Web3 技术&#xff0c;凭借实战锻炼开发创新项目&#xff0c;就…

【运维笔记】VM 记录一次centos虚拟机和宿主机之间ping不通的问题

问题描述 环境&#xff1a;centos7&#xff0c;静态ipVM版本&#xff1a;VMware Workstation 16 pro&#xff0c;网络为nat映射模式问题&#xff1a; 一开始&#xff0c;虚拟机可以ping通宿主机&#xff0c;也可以ping通&#xff0c;也可以ping通外网&#xff08;如 ping www.…

海外云手机如何帮助亚马逊引流?

随着全球化的推进&#xff0c;出海企业和B2B外贸企业越来越注重海外市场的开拓&#xff0c;这已成为企业争夺市场份额的重要策略。本文将重点探讨海外云手机在优化亚马逊店铺引流方面的作用和优势。 海外云手机是一种在云端运行的虚拟手机&#xff0c;能够在单一芯片上多开几个…

centos 环境部署

一、安装redis 1. 升级 GCC 最直接的解决方式是升级你的 GCC 编译器到支持 C11 标准的版本。CentOS 7 默认的 GCC 版本较旧&#xff0c;可能不支持 _Atomic。你可以通过以下步骤升级 GCC&#xff1a; 启用 CentOS 的 Software Collections (SCL) 仓库&#xff0c;该仓库提供了…

软件的安装与卸载(YUM)

YUM&#xff1a;yum 是一个方便的"应用商店"&#xff0c;你可以通过它轻松地安装、更新和删除软件包&#xff0c;就像从应用商店中下载和安装应用程序一样。&#xff08;这个得用root身份&#xff0c;普通用户权限不够&#xff09; 常用命令&#xff1a; 1.安装软件…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…