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

Nacos

概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集,包括动态服务发现、服务配置、服务元数据及流量管理,帮助用户更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
在定位上,Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了强大的功能和简单易用的特性集,帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。
在原理上,Nacos通过注册中心实现服务的注册与发现,通过配置管理模块实现配置的动态获取和更新,通过服务管理模块实现服务的元数据管理和流量管理。
在使用上,Nacos可以与Spring, Spring Boot, Spring Cloud等框架集成,可以代替Spring Cloud Eureka和Spring Cloud Config。
要在 Nacos 中使用注册中心功能,需要按照以下步骤进行:
- 在项目的 pom.xml 文件中添加 Nacos 的相关依赖。
- 在项目的 application.yml 或 application.properties 文件中配置 Nacos 注册中心的相关参数,例如 Nacos 的地址、端口、用户名、密码等。
- 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用服务注册和发现功能。
- 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
- 在项目的客户端类中添加 @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 实现负载均衡,需要按照以下步骤进行:
- 在项目的 pom.xml 文件中添加 Spring Cloud 和 Ribbon 的相关依赖。
- 在项目的 application.yml 或 application.properties 文件中配置 Ribbon 相关的参数,例如 Ribbon 的服务器列表、轮询间隔等。
- 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用 Nacos客户端功能。
- 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
- 在项目的客户端类中添加 @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 实现远程调用,需要按照以下步骤进行:
- 在项目的 pom.xml 文件中添加 Spring Cloud 和 Feign 的相关依赖。
- 在项目的 application.yml 或 application.properties 文件中配置 Feign 相关的参数,例如 Feign 的客户端名称、超时时间等。
- 在项目的主程序中添加 @EnableFeignClients 注解来启用 Feign 客户端功能。
- 在项目的服务接口中添加 @FeignClient 注解来声明服务接口和指定远程服务的 URL。
- 在项目的客户端类中注入服务接口,并通过服务接口来调用远程服务的方法
Feign拓展
1>@FeignClient 中name为服务提供者在nacos上注册的服务名, 否则报错
Load balancer does not have available server for client:xxxx-service
2>@GetMapping(“/products/{pid}”) 指定接口路径,必须跟服务提供者提供接口url一样,否则报错
feign.FeignException$NotFound: [404] during [GET] to [http://xxx-service/xxx]
3> 定义接口参数:如果使用了参数路径方式访问,需要使用@PathVariable(“pid”) 明确指定路径参数,否则报错
feign.FeignException$NotFound: [404] during [GET] to [http://xxx-service/xxx]
4>定义接口参数:如果使用普通方式访问,参数需要使用@RequestParam标记,否则报错
feign.FeignException$MethodNotAllowed: [405] during [GET] to [http://xxxx-service/xxxx?xxx=1]
5>定义接口参数:如果是对象参数,参数需要使用@RequestBody标记(注意fegin接口,controller接口都要),否则报错
参数无法获取
6>定义接口参数:如果是对象,可以使用@SpringQueryMap替换上面的@RequestBody
7>定义接口参数:如果需要进行文件上传,需要使用@RequestPart注解标记
8>Feign接口调用默认连接时间是1s,如果电脑较慢,开发中可以配置长一点时间
注意:后面学sentinel 时候,不要配置,会影响观测效果
feign:client:config:default:connectTimeout: 5000 #连接时间,单位毫秒readTimeout: 5000 #操作时间
相关文章:
SpringCloud Alibaba(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign
Nacos 概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集,包括动态服务发现、服务配置…...
基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码
基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于乌鸦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…...
Jenkins中强制停止停不下来的job
# Script console 执行脚本 Jenkins 的提供了 script console 的功能,允许你写一些脚本,来调度 Jenkins 执行一些任务。 我们就可以利用 script console 来强制停止 job 执行。 首先进入 Jenkins 的 script console 页面: script console 路…...
北邮22级信通院数电:Verilog-FPGA(9)第九周实验(1)实现带同步复位功能、采用上升沿触发的D触发器
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.顶层模块的书写 二.两种验证方法 2.1使用…...
go中的rune类型
go语言中 ,rune其实是一种int32的数据类型的别名。 // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune int32rune通常用于处理字符串中的单…...
C51--PC通过串口(中断)点亮LED
B4中的:REN允许 / 禁止串行接收控制位 REN 1为允许串行接收状态。 接收数据必须开启。所以SCON:0101 0000 ;即0x50 如何知道数据已经接收 RI位:当收到数据后 RI 1(由硬件置一) 硬件置一后必须用软件…...
使用pixy计算群体遗传学统计量
1 数据过滤 过滤参数:过滤掉次等位基因频率(minor allele frequency,MAF)低于0.05、哈达-温伯格平衡(Hardy– Weinberg equilibrium,HWE)对应的P值低于1e-10或杂合率(heterozygosit…...
第十九章总结:Java绘图
19.1:Java绘图类 19.2:绘制图形 package nineteentn; import java.awt.*; import javax.swing.*; public class DrawCircle extends JFrame { private final int OVAL_WIDTH 80; // 圆形的宽 private final int OVAL_HEIGHT 80; // 圆形的高…...
Mybatis-Plus条件构造器QueryWrapper
Mybatis-Plus条件构造器QueryWrapper 1、条件构造器关系介绍 介绍 : 上图绿色框为抽象类 蓝色框为正常类,可创建对象 黄色箭头指向为父子类关系,箭头指向为父类 wapper介绍 : Wrapper : 条件构造抽象类࿰…...
python解析wirshark抓包数据
因为工作需要,需要分析wirshark的抓包数据。数据有的是在比特位中。不方便查找。而lua语言又不愿意去学,所以用python解析后,输出日志。帮助分析.1.tcp分析 from dpkt.tcp import TCP from scapy.all import * from datetime import datetim…...
一个用于操作Excel文件的.NET开源库
推荐一个高性能、跨平台的操作Excel文件的.NET开源库。 01 项目简介 ClosedXML是一个.NET第三方开源库,支持读取、操作和写入Excel 2007 (.xlsx, .xlsm)文件,是基于OpenXML封装的,让开发人员无需了解OpenXML API底层API…...
Web APIs——正则表达式使用
1、什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 1.1 正则表达式使用场景 例如…...
文件包含学习笔记总结
文件包含概述 程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。 程…...
<C++> 优先级队列
目录 前言 一、priority_queue的使用 1. 成员函数 2. 例题 二、仿函数 三、模拟实现 1. 迭代器区间构造函数 && AdjustDown 2. pop 3. push && AdjustUp 4. top 5. size 6. empty 四、完整实现 总结 前言 优先级队列以及前面的双端队列基本上已经脱离了队列定…...
systemverilog:interface中的modport用法
使用modport可以将interface中的信号分组并指定方向,方向是从modport连接的模块看过来的。简单示例如下: interface cnt_if (input bit clk);logic rstn;logic load_en;logic [3:0] load;logic [7:0] count;modport TEST (input clk, count,output rst…...
VR建筑仿真场景编辑软件有助于激发创作者的灵感和创造力
随着VR虚拟现实技术的不断发展和普及,VR虚拟场景编辑器逐渐成为了VR场景开发重要工具。它对于丰富和完善VR虚拟现实内容的创建和呈现具有重要的意义,为我们的工作和教学带来了许多变化和可能性。 首先,VR虚拟场景编辑器对于提升用户体验具有重…...
8.查询数据
一、单表查询 MySQL从数据表中查询数据的基本语为SELECT语。SELECT语的基本格式是: SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator>…...
VB.NET—Bug调试(参数话查询、附近语法错误)
目录 前言: BUG是什么! 事情的经过: 过程: 错误一: 错误二: 总结: 前言: BUG是什么! 在计算机科学中,BUG是指程序中的错误或缺陷,它通过是值代码中的错误、逻辑错误、语法错误、运行时错误等相关问题,这些问题…...
武汉凯迪正大—锂电池均衡维护仪
产品概况 KDZD885C 电池容量平衡测试系统,主要用于锂电池箱充放电测试及均衡维护,解决锂电池包单芯电压不均衡的痛点,用于快速解决锂电池电压不一致的难题,适用于各锂电池模组电压等级,集单芯放电,充电,均…...
解决服务器中的mysql连接不上Navicat的问题脚本
shell标本,快速解决服务器中的mysql连接不上Navicat的问题 在Linux服务器开发中,mysql的配置文件一般是只允许本地连接 所以想用Navicat进行连接,就需要修改配置和mysql中用户访问表的权限 为了方便,写成了shell脚本 #!/bin/bas…...
AI Agent在智能风控中的实战:多智能体欺诈检测与预警
AI Agent在智能风控中的实战:多智能体欺诈检测与预警 你有没有过明明是正常交易却被银行冻结账户的糟糕体验?或是听说过某电商平台上线新活动首日就被黑产团伙薅走数千万补贴的新闻?随着黑产欺诈向团伙化、专业化、动态化演进,传统依赖规则引擎、单模型机器学习的风控体系已…...
ThinkPad开机嘀嘀响或报2100/2110错误?可能是硬盘松了!自己动手检测与修复指南
ThinkPad开机嘀嘀响或报2100/2110错误?三步排查硬盘接触不良问题ThinkPad用户对那个标志性的开机"嘀嘀"声再熟悉不过——正常情况下它意味着系统自检通过。但当这个声音变成急促的报警音,伴随屏幕上出现"2100 Detection error"或&qu…...
Win10家庭版别再卡了!保姆级教程:手动修复gpedit.msc路径,彻底关闭Antimalware Service
Win10家庭版性能优化实战:精准修复组策略路径与系统服务调优每次游戏激战正酣时突然卡顿,或是视频渲染到关键时刻系统响应迟缓,很多Win10家庭版用户都遭遇过这类困扰。任务管理器里那个名为"Antimalware Service Executable"的进程…...
DeepSeek系统设计辅助效能断崖式下降的3个信号,第2个90%工程师至今未察觉!
更多请点击: https://kaifayun.com 第一章:DeepSeek系统设计辅助效能断崖式下降的3个信号,第2个90%工程师至今未察觉! 当 DeepSeek 的系统设计辅助能力突然变“笨”——接口建议频繁失准、上下文感知错乱、生成代码无法通过基础编…...
Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效
Visual Paradigm 17.0 团队协作实战指南:从模板配置到文件夹管理的高效工作流在敏捷开发团队中,项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能,特别是服务器端项目模板和文件…...
Arduino PWM转4-20mA工业电流信号:二阶滤波与V/I转换电路设计
1. 项目概述:从PWM到工业标准电流信号在工业自动化、过程控制和传感器领域,4-20 mA电流环是一个几乎无处不在的标准。它用4 mA代表测量值的下限(如0C),20 mA代表上限(如100C),这种设…...
录音会议纪要整理不同使用场景,实用口碑选择建议
针对不同场景的录音整理需求(短录音、中长录音、长内容深度整理),本文基于实际使用体验,分享不同场景下的工具选择建议与使用心得。一、场景一:短录音(15-60分钟,发音清晰)典型场景&…...
告别手动复制!用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data
告别手动复制!用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data在Unity关卡设计和技术美术的工作流中,地形数据的灵活复用往往意味着反复的手动操作——导出高度图、备份材质参数、复制植被分布,每个环节都可能成为效率瓶颈。想象这样…...
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 在流媒体音乐主导的时代,音乐爱好者面临着一种矛盾:我们享受着…...
如何在5分钟内使用CrewAI Studio快速搭建AI工作流:零代码AI智能体开发终极指南
如何在5分钟内使用CrewAI Studio快速搭建AI工作流:零代码AI智能体开发终极指南 【免费下载链接】CrewAI-Studio A user-friendly, multi-platform GUI for managing and running CrewAI agents and tasks. Supports Conda and virtual environments, no coding need…...
