SpringCloud Alibaba(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign

在这里插入图片描述

Nacos

在这里插入图片描述

概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集,包括动态服务发现、服务配置、服务元数据及流量管理,帮助用户更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

在定位上,Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了强大的功能和简单易用的特性集,帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。

在原理上,Nacos通过注册中心实现服务的注册与发现,通过配置管理模块实现配置的动态获取和更新,通过服务管理模块实现服务的元数据管理和流量管理。

在使用上,Nacos可以与Spring, Spring Boot, Spring Cloud等框架集成,可以代替Spring Cloud Eureka和Spring Cloud Config。
要在 Nacos 中使用注册中心功能,需要按照以下步骤进行:

  1. 在项目的 pom.xml 文件中添加 Nacos 的相关依赖。
  2. 在项目的 application.yml 或 application.properties 文件中配置 Nacos 注册中心的相关参数,例如 Nacos 的地址、端口、用户名、密码等。
  3. 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用服务注册和发现功能。
  4. 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
  5. 在项目的客户端类中添加 @RibbonClient 和 @FeignClient 注解来声明客户端和调用服务。

ribbon

概念:Ribbon是一个基于Netflix的开源项目,它是一个客户端的负载均衡工具。Ribbon提供了完善的配置,例如超时、重试等,并且支持多种负载均衡算法,例如轮询、随机、最少连接算法等。

在概念上,负载均衡是指将客户端的请求分配到多个服务器上,以实现高可用性和高性能。Ribbon作为负载均衡器,通过客户端向Ribbon发送请求,然后Ribbon根据负载均衡算法选择一个服务器,并将请求转发给该服务器。如果该服务器无法响应请求,Ribbon会自动选择另一个服务器,并将请求转发给它。

在定位上,Ribbon是Spring Cloud生态系统中的一部分,它主要用于客户端的负载均衡。

在原理上,Ribbon的工作原理是基于权重的轮询算法。它将所有服务器分配一个权重值,并根据权重值来决定每个服务器被选择的概率。例如,如果服务器A的权重值为2,服务器B的权重值为1,那么在轮询过程中,服务器A被选择的概率是2/3,服务器B被选择的概率是1/3。此外,Ribbon还支持多种负载均衡算法,例如随机算法、最少连接算法、IP哈希算法等。这些算法可以根据不同的场景选择合适的负载均衡策略,以提高系统的性能和可用性。

在使用上,Ribbon可以与Spring Cloud集成,通过合理地配置权重和选择合适的负载均衡算法,可以帮助我们实现高可用性和高性能的分布式系统。同时,Ribbon也支持自定义的负载均衡策略,用户可以根据自己的需求实现自定义的负载均衡算法。
要在 Spring Cloud 中使用 Ribbon 实现负载均衡,需要按照以下步骤进行:

  1. 在项目的 pom.xml 文件中添加 Spring Cloud 和 Ribbon 的相关依赖。
  2. 在项目的 application.yml 或 application.properties 文件中配置 Ribbon 相关的参数,例如 Ribbon 的服务器列表、轮询间隔等。
  3. 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用 Nacos客户端功能。
  4. 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
  5. 在项目的客户端类中添加 @FeignClient 注解来声明客户端和调用服务。

feign

概念:Feign是一个声明式的Web Service客户端,它使得写HTTP客户端变得更简单。Feign的口号是“Feign makes Java HTTP clients dead simple”,它的核心注解和方法极简主义以及使用可插拔的编码器和解码器,使得编写HTTP客户端变得更简单。

在概念上,Feign是一种轻量级的RESTful的HTTP服务客户端,它以Java接口注解的方式调用Http请求,类似于Dubbo,服务消费者拿到服务提供者的接口,然后像调用本地接口方法一样去调用,实际发出的是远程的请求。

在定位上,Feign是Spring Cloud生态系统中的一部分,它主要用于服务的远程调用。

在原理上,Feign通过动态代理的方式将接口的方法映射到HTTP请求上,然后通过HTTP客户端发送请求,最终获取到响应结果。在使用Feign进行远程调用时,我们需要定义一个接口,该接口中定义了需要调用的方法。接口中的方法可以使用注解来指定请求的URL、请求方法、请求参数等信息。例如,我们可以使用@FeignClient注解来指定需要调用的服务名称和服务地址等信息。

在使用上,Feign可以通过引入相关的依赖包来使用。在配置上可以通过添加注解和编写Feign的客户端代码来实现远程调用。同时也可以根据实际需要自定义配置和优化Feign的使用。
要在 Spring Cloud 中使用 Feign 实现远程调用,需要按照以下步骤进行:

  1. 在项目的 pom.xml 文件中添加 Spring Cloud 和 Feign 的相关依赖。
  2. 在项目的 application.yml 或 application.properties 文件中配置 Feign 相关的参数,例如 Feign 的客户端名称、超时时间等。
  3. 在项目的主程序中添加 @EnableFeignClients 注解来启用 Feign 客户端功能。
  4. 在项目的服务接口中添加 @FeignClient 注解来声明服务接口和指定远程服务的 URL。
  5. 在项目的客户端类中注入服务接口,并通过服务接口来调用远程服务的方法

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

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

相关文章

【Pytorch和深度学习】栏目导读

一、栏目说明 本栏目《pytorch实践》是为初学者入门深度学习准备的。本文是该栏目的导读部分,因为计划本栏目在明年完成,因此,导读部分,即本文也在持续更新中。 本栏目设计目标是将深度学习全面用pytorch实践一遍,由浅…

上机实验四 图的最小生成树算法设计 西安石油大学数据结构

实验名称:图的最小生成树算法设计 (1)实验目的: 掌握最小生成树算法,利用kruskal算法求解最小生成树。 (2)主要内容: 利用kruskal算法求一个图的最小生成树,设计Krus…

Xilinx Artix7-100T低端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…

数据校验:Spring Validation

Spring Validation概述 在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦…

K8S篇之etcd数据备份与恢复

一、etcd备份与恢复 基本了解: 1、k8s 使用etcd数据库实时存储集群中的数据,安全起见,一定要备份。 2、备份只需要在一个节点上备份就可以了,每个节点上的数据是同步的;但是数据恢复是需要在每个节点上进行。 3、etcd…

系统韧性研究(4)| 系统韧性的技术分类

系统韧性技术是任何提高系统韧性的架构、设计或实现技术。这些技术(例如缓解措施,如冗余、保障措施和网络安全对策)或被动地抵御逆境或主动检测逆境,并对其做出反应,亦或者从它们造成的伤害中恢复过来。系统韧性技术是…

ArcGIS实现矢量区域内所有要素的统计计算

1、任务需求:统计全球各国所有一级行政区相关属性的总和。 (1)有一个全球一级行政区的矢量图,包含以下属性(洪灾相关属性 province.shp) (2)需要按照国家来统计各个国家各属性的总值…

突然消失的桌面文件如何恢复?详细教程让你轻松解决问题!

桌面文件突然消失,对于很多人来说,可能是个令人头疼的问题。这些文件可能包含重要的信息,也可能是数日甚至数周的努力成果。那么,当这种情况发生时,我们如何恢复丢失的文件呢?本文将提供一些实用的建议。 1…

【ArcGIS Pro微课1000例】0031:las点云提取(根据范围裁剪点云)

本文讲解ArcGIS Pro3.0中,las点云数据的提取(根据范围裁剪点云)方法。 文章目录 一、加载数据二、工具介绍三、点云裁剪一、加载数据 打开ArcGIS Pro,新建地图,加载配套实验数据包中的0031.rar中的点云数据point.las与范围bound.shp,如下图所示: 二、工具介绍 名称:提…

一张图搞懂什么是BCD8421编码

如图所示 BCD8421编码的意义是 用四位二进制数表达一位的十进制数 因此十进制下的0~9在BCD8421编码下与其二进制表达是一样的 而多位的十进制数 比如说“10” 则需要将它拆分成两个单独的数“1”和“0” 分别用BCD8421编码表示这两个数 十进制“1” -> 0001 十进…

内衣洗衣机和手洗哪个干净?好用的内衣洗衣机推荐

在日常生活中,我们的衣服不可避免地会沾染上各种细菌、毛发和污渍,将它们与贴身衣物混合清洗,很容易发生交叉感染,而被感染后,贴身衣物也有可能导致我们人体引起皮肤病。这也是为什么大部分人都喜欢用手洗的原因&#…

@CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思

@CacheInvalidate 注解是 JetCache 框架提供的注解,它是由阿里巴巴开源的组织 Alibaba Group 开发和维护的。JetCache 是一款基于注解的缓存框架,提供了丰富的缓存功能和灵活的配置选项,可用于增强应用程序的性能和可扩展性。JetCache 支持多种缓存后端,包括内存缓存、Redi…

矩阵的除法

B/A 如果矩阵A可逆,那么 证明: A/AB 如果矩阵A和B都可逆,那么 证明:

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于回溯搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

优雅的Java编程:将接口对象作为方法参数

theme: smartblue 目录 概述 在Java编程中,方法的参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而,一种更加优雅且灵活的设计模式是将接口对象作为方法的参数。这种方式为我们带来了许多好处,包括降低耦合性、实现多态性和可…

Jenkins 构建CICD

GitLab GitLab安装 https://gitlab.cn/install/?versionce CentOS 下安装 1. 安装和配置必须的依赖项 在 CentOS 7上,下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤,如果您打算仅从本地网络访问极狐GitLab&#xf…

【现场问题】datax中write部分为Oracle的时候插入clolb类型字段,插入的数据为string且长度过场问题

datax的Oraclewriter 报错显示查询报错展示查找datax中的数据插入模块 报错显示 occurred during batching: ORA-01704: string literal too long 查询报错展示 基本上查到的都是这样的,所以锁定是clob的字段类型的问题,而且是只有Oracle出问题&#…

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地

11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…

微信小程序漏洞之accesskey泄露

更新时间:2023年09月08日09:42:52 1. Accesskey泄露漏洞 这篇文章里面都是以我个人的视角来进行的,因为一些原因,中间删了一些东西,肯定有很多不正确的地方,希望大家能理解,也能指正其中的错误。 在以前…

VCR库代码示例

1. 首先,我们需要在代码中添加对VCR库的引用: ruby require vcr require rest-client 2. 然后,我们需要创建一个VCR录制器,以便我们可以记录实际的HTTP请求和响应: ruby VCR.use_cassette(download_video, record:…