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-wemedia
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848
      config:
        server-addr: 192.168.200.130:8848
        file-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框架 - 掘金

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cache缓存:HTTP缓存策略解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Kotlin】扩展属性、扩展函数

1 类的扩展 Kotlin 提供了扩展类或接口的操作&#xff0c;而无需通过类继承或使用装饰器等设计模式&#xff0c;来为某个类添加一些额外的属性或函数&#xff0c;我们只需要通过一个被称为扩展的特殊声明来完成。通过这种机制&#xff0c;我们可以将那些第三方类不具备的功能强…

Gateway新一代网关

Gateway新一代网关 1、概述 ​ Cloud全家桶中有个很重要的组件就是网关&#xff0c;在1.x版本中都是采用的Zuul网关&#xff1b; ​ 但在2.x版本中&#xff0c;zuul的升级一直跳票&#xff0c;SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul。 ​ 官网&…

HarmonyOS/OpenHarmony应用开发-HDC环境变量设置

hdc&#xff08;HarmonyOS Device Connector&#xff09;是 HarmonyOS 为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在 windows/linux/mac 系统上与真实设备或者模拟器进行交互。 hdc 工具通过 HarmonyOS SDK 获取&#xff0c;存放于 /Huawei/Sdk/openhar…

责任链模式(处理逻辑解耦)

前言 使用设计模式的主要目的之一就是解耦&#xff0c;让程序易于维护和更好扩展。 责任链则是将处理逻辑进行解耦&#xff0c;将独立的处理逻辑抽取到不同的处理者中&#xff0c;每个处理者都能够单独修改而不影响其他处理者。 使用时&#xff0c;依次调用链上的处理者处理…

RK3399 android10 移植SiS-USB触摸驱动

一&#xff0c;SiS USB触摸简介 SiS USB 触摸屏通常是一种外接式触摸屏设备&#xff0c;通过 USB 接口连接到计算机或其他设备上。这种触摸屏设备可以提供触摸输入功能&#xff0c;用户可以通过手指或触控笔在屏幕上进行操作&#xff0c;实现点击、拖动、缩放等操作。 SiS USB…

双向链表增删改查、遍历、倒置、销毁等——数据结构——day3

首先&#xff0c;我先把我的头节点写出来&#xff0c;里面有整理好的结构体 #ifndef __DOULINK_H__ #define __DOULINK_H__#include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct student {int id;char name[50];int score; }DATA_TYPE; …

【数据可视化】Echarts中的其它图表

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 绘制散点图2.1 绘制基本散点图2.2 绘制两个序列的散点图2.3 绘制带涟漪特效的散点图 3. 绘制气泡图3.1 绘制标准气泡图3.2 绘制各国人均寿命与GDP气泡图3.3 绘制城市A、城市B、城市C三个城市空气污染指数气…

负数,小数转换二进制

负数转换二进制 例&#xff1a;在带符号整数signed char的情况下&#xff0c;-57如何被表示成负数呢&#xff1f;在计算机中又是如何计算66-57呢&#xff1f; 解析 考虑int占有32位太长&#xff0c;因此使用只占8位的signed char类型来举例。57用二进制表示位00111001&#…

28-5 文件上传漏洞 - 图片马

一、文件内容检测 解析漏洞定义 控制文件是否被当做后端脚本处理 二、图片马绕过 图片马;在图片中包含一句话木马。利用解析漏洞如.htaccess 或文件包含漏洞,对图片马进行解析,执行其中的恶意代码。优势在于可以绕过多种防护机制。 三、图片马制作方法: # 一句话马示例…

nRF Sniffer在wireshark下的环境搭建

一、准备 nRF Sinffer 安装包&#xff1a; 直接下载&#xff1a;https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/desktop-software/nrf-sniffer/sw/nrf_sniffer_for_bluetooth_le_4.1.1.zip 官网下载&#xff1a; nRF Sniffer for Bluetooth…

Elasticsearch - Docker安装Elasticsearch8.12.2

前言 最近在学习 ES&#xff0c;所以需要在服务器上装一个单节点的 ES 服务器环境&#xff1a;centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置 新增配置文件 elasticsearch.yml http.host…

实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)

1、先看一效果&#xff1a; 2、实现思路&#xff1a; 使用定时器setTimeout和闭包实现常规防抖功能&#xff1b;增加immediate字段控制第一次是否执行一次函数&#xff08;true or false&#xff09;&#xff1b;增加一个flag标识&#xff0c;在第一次执行时&#xff0c;将标…

Aspose.PDF功能演示:在 JavaScript 中优化 PDF 文件

PDF 文件是一种普遍存在的文档共享格式&#xff0c;但它们有时可能会很大&#xff0c;导致加载时间变慢并增加存储要求。优化 PDF 文件对于确保无缝的用户体验至关重要&#xff0c;尤其是在 Web 应用程序中。因此&#xff0c;在这篇博文中&#xff0c;我们将探讨如何使用 JavaS…

软考网工学习笔记(6) 广域通信网

公共交换电话网&#xff08;pstn&#xff09; 在pstn是为了语音通信而建立的网络。从20世纪60你年代开始用于数据传输 电话网有三个部分组成&#xff1a; 本地回路 &#xff0c;干线 和 交换机 。 干线 和 交换机 一般采用数字传输和交换技术 &#xff0c;而 本地回路基本采…

Ubuntu18.04桌面版设置静态IP地址

引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置&#xff0c;可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框&#xff0c;点击“设置”按…

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

第三部分&#xff1a;类和协议 第十一章&#xff1a;一个 Python 风格的对象 使库或框架成为 Pythonic 是为了让 Python 程序员尽可能轻松和自然地学会如何执行任务。 Python 和 JavaScript 框架的创造者 Martijn Faassen。 由于 Python 数据模型&#xff0c;您定义的类型可以…

【Linux】进程详解

目录 一、进程基本概念&#xff1a; 二、进程的五种基本状态&#xff1a; 三、Linux的进程状态&#xff1a; 四、控制进程状态相关指令&#xff1a; 五、僵尸进程与孤儿进程&#xff1a; 六、进程的优先级&#xff1a; 七、进程的四个重要特性&#xff1a; 八、环境变量…

ping 通ip,ping 不通域名

在linux 系统中&#xff0c;ping 通ip,ping 不通对应的域名时&#xff0c;可直接修改系统配置文件 vi /etc/hosts 加入 ip 域名

好就业三种专业#信息安全#云计算#网络工程

一、信息安全专业 根据2021年网络安全宣传周白皮书的观察结果&#xff0c;网络安全产业对于人才的需求正以高速增长的趋势呈现&#xff0c;当前网络安全行业存在着巨大的人才缺口&#xff0c;平均供求比例约为1:2。这一现象导致了资深人才的储备不足&#xff0c;并且新人才的培…