Nacos+LoadBalancer实现服务注册与发现

目录

一、相关文章

二、兼容说明

三、服务注册到Nacos

四、服务发现

五、服务分级存储模型

六、查看集群服务

七、LoadBalancer负载均衡 


一、相关文章
  • 基础工程:gradle7.6.1+springboot3.2.4创建微服务工程-CSDN博客

  • Nacos服务端安装:Nacos服务端安装-CSDN博客

  • Nacos架构&原理:https://www.yuque.com/nacos/ebook/un9fgs

  • LoadBalancer官方文档:https://spring.io/guides/gs/spring-cloud-loadbalancer

  • LoadBalancer自定义策略:https://blog.csdn.net/BASK2312/article/details/129025006

二、兼容说明
  • 与SpringBoot3兼容的SpringCloud里的nacos-discovery依赖不含Ribbon,新增了LoadBalancer。

  • 如果想使用Ribbon做负载均衡,参考https://blog.csdn.net/cherishSpring/article/details/149472343。

  • 使用SpringBoot3,即使单独引用了Ribbon也是不生效的。

三、服务注册到Nacos

1、父工程cloud-demo3.0引入依赖

  • SpringCloud及SpringCloudAlibaba需根据SpringBoot参照[版本对照表]:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

  • dependencyManagement引入依赖版本管理包,其管理的依赖引入不需要再指定版本

  • 查看管理依赖版本[spring-cloud-dependencies]:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/2023.0.1

  • 查看管理依赖版本[spring-cloud-alibaba-dependencies]:https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies/2023.0.0.0-RC1

dependencyManagement {  imports { mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:2023.0.0.0-RC1" }  imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:2023.0.1" }  
}  dependencies {  //nacos  implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'  //springcloud2021开始,使用loadbalancer处理客户端负载均衡  implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
}

 2、子工程application.yml配置

spring:  application:  name: order-service  cloud:  nacos:  # nacos 服务端地址  server-addr: 192.168.10.104:10001  discovery:  # 命名空间ID,需在注册中心创建再指定namespace: 44480e91-8290-43e4-9129-2d2d42ecd30a  # 配置集群名称,也就是机房位置,如:HZ,杭州  cluster-name: HZ  # nacos登录  username: nacos  password: nacos# 是否是临时实例,临时实例心跳不正常会被剔除,非临时实例则不会被剔除ephemeral: false

3、临时实例与非临时实例区别:参考[[Nacos和Eureka对比]]中Nacos与Eureka的区别 

4、 非临时实例必须调api才能删除,否则对应工程改为临时实例启动不了

### user-删除nacos注册中心user-service服务  
DELETE http://127.0.0.1:10001/nacos/v2/ns/instance?serviceName=user-service&ip=192.168.10.104&port=8083&namespaceId=44480e91-8290-43e4-9129-2d2d42ecd30a&clusterName=HZ&ephemeral=false&groupName=DEFAULT_GROUP  
Content-Type: application/x-www-form-urlencoded

5、在Nacos服务端创建namespace命名空间

  • namespace用来做环境隔离,如生产环境(prod)、开发环境(dev)

  • 每个namespace都有唯一id

  • 不同namespace下的服务不可见,prod的服务不能请求到dev去

6、启动多个user-service,参考idea中同服务启动多个-CSDN博客

四、服务发现

1、在OrderApplication类创建RestTemplate

@Bean  
@LoadBalanced  //添加使用负载均衡注解
RestTemplate restTemplate() {  return new RestTemplate();  
}

2、服务远程调用

//示例:在order服根据用户ID拉取user服用户信息
@Override  
public Order getOrderById(Long orderId) {  //获取订单信息  Order order = orderMapper.getOrderById(orderId);  //根据订单用户ID获取用户信息,通过host:port拼接请求路径//String url = "http://localhost:8083/user/" + order.getUserId();  //eureka方式:通过user-service服务名拼接请求路径String url = "http://user-service/user/" + order.getUserId();  //执行远程调用User user = restTemplate.getForObject(url, User.class);  order.setUser(user);  return order;  
}
五、服务分级存储模型
# 服务分级存储模型
一级是服务,例如user-service
二级是集群,例如杭州,上海
三级是实例,例如杭州机房的某台部署了user-service的服务器# 配置集群
spring.cloud.nacos.discovery.cluster-name: HZ

 

六、查看集群服务

七、LoadBalancer负载均衡 

1、默认规则,详细分析可参考:https://blog.csdn.net/BASK2312/article/details/129025006

默认提供了三种不同的负载均衡器:

  • RandomLoadBalancer(随机负载均衡器)、

  • RoundRobinLoadBalancer(轮询负载均衡器)、

  • NacosLoadBalancer(同集群优先调用均衡器)

2、指定使用同集群优先调用策略

  • 创建一个类CustomLoadBalancerConfiguration

  • OrderApplication加注解@LoadBalanced、@LoadBalancerClients

/**  
* Spring Cloud LoadBalancer替代Ribbon实现 随机/轮询/同集群优先调用 方式负载均衡策略配置  
*/  
public class CustomLoadBalancerConfiguration {  // Nacos配置属性  @Resource  private NacosDiscoveryProperties nacosDiscoveryProperties;  /**  * 自定义负载均衡策略(随机/轮训/同集群优先调用)  *  * @return ReactorLoadBalancer  */  @Bean  ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory factory) {  String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); //return new NacosSameClusterWeightedRule(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  //同集群优先调用,只有Nacos有,Eureka没有  return new NacosLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name, nacosDiscoveryProperties);  //随机  //return new RandomLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  //轮询  //return new RoundRobinLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);  }  
}
@LoadBalancerClients(defaultConfiguration= CustomLoadBalancerConfiguration.class)  
@SpringBootApplication  
public class OrderApplication {  public static void main(String[] args) {  SpringApplication.run(OrderApplication.class, args);  }  @Bean  @LoadBalanced  //该注解表示使用负载均衡RestTemplate restTemplate() {  return new RestTemplate();  }  
}

 3、根据权重负载均衡(权重值在0-1之间)

实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。设为0表示后续不会调用,已发生的调用正常执行
设为0.1表示10个请求只有1个请求到8081同集群两个都为0.1,另一集群为1,设置了同集群优先调用规则,也只调用0.1集群里的服务

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

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

相关文章

事务并发-封锁协议

事务并发数据库里面操作的是事务。事务特性&#xff1a;原子性&#xff1a;要么全做&#xff0c;要么不做。一致性&#xff1a;事务发生后数据是一致的。隔离性&#xff1a;任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的&#xff0c;不同事务之间是隔离的…

大气波导数值预报方法全解析:理论基础、预报模型与误差来源

我们希望能够像天气预报一样&#xff0c;准确预测何时、何地会出现大气波导&#xff0c;其覆盖范围有多大、持续时间有多长&#xff0c;以便为通信、雷达等应用提供可靠的环境保障。 目录 &#xff08;一&#xff09;气象预报 1.1 气象预报的分类 1.2 大气数值预报基础 1.2…

关于JavaWeb的总结笔记

JavaWeb基础描述Web服务器的作用是接受客户端的请求&#xff0c;给客户端响应服务器的使用Tomcat&#xff08;最常用的&#xff09;JBossWeblogicWebsphereJavaWeb的三大组件Servlet主要负责接收并处理来自客户端的请求&#xff0c;随后生成响应结果。例如&#xff0c;在处理用…

生成式引擎优化(GEO)核心解析:下一代搜索技术的演进与落地策略

最新统计数据声称&#xff0c;今天的 Google 搜索量是 ChatGPT 搜索的 373 倍&#xff0c;但我们大多数人都觉得情况恰恰相反。 那是因为很多人不再点击了。他们在问。 他们不是浏览搜索结果&#xff0c;而是从 ChatGPT、Claude 和 Perfasciity 等工具获得即时的对话式答案。这…

网编数据库小练习

搭建服务器客户端&#xff0c;要求 服务器使用 epoll 模型 客户端使用多线程 服务器打开数据库&#xff0c;表单格式如下 name text primary key pswd text not null 客户端做一个简单的界面&#xff1a;1&#xff1a;注册2&#xff1a;登录无论注册还是登录&#xff0c;…

理解 PS1/PROMPT 及 macOS iTerm2 + zsh 终端配置优化指南

终端提示符&#xff08;Prompt&#xff09;是我们在命令行中与 shell 交互的关键界面&#xff0c;它不仅影响工作效率&#xff0c;也影响终端显示的稳定和美观。本文将结合 macOS 上最流行的 iTerm2 终端和 zsh shell&#xff0c;讲解 PS1/PROMPT 的核心概念、常见配置技巧&…

Laravel 原子锁概念讲解

引言 什么是竞争条件 (Race Condition)&#xff1f; 在并发编程中&#xff0c;当多个进程或线程同时访问和修改同一个共享资源时&#xff0c;最终结果会因其执行时序的微小差异而变得不可预测&#xff0c;甚至产生错误。这种情况被称为“竞争条件”。 例子1&#xff1a;定时…

83、形式化方法

形式化方法&#xff08;Formal Methods&#xff09; 是基于严格数学基础&#xff0c;通过数学逻辑证明对计算机软硬件系统进行建模、规约、分析、推理和验证的技术&#xff0c;旨在保证系统的正确性、安全性和可靠性。以下从核心思想、关键技术、应用场景、优势与挑战四个维度展…

解决 Ant Design v5.26.5 与 React 19.0.0 的兼容性问题

#目前 Ant Design v5.x 官方尚未正式支持 React 19&#xff08;截至我的知识截止日期2023年10月&#xff09;&#xff0c;但你仍可以通过以下方法解决兼容性问题&#xff1a; 1. 临时解决方案&#xff08;推荐&#xff09; 方法1&#xff1a;使用 --legacy-peer-deps 安装 n…

算法与数据结构(课堂2)

排序与选择 算法排序分类 基于比较的排序算法&#xff1a; 交换排序 冒泡排序快速排序 插入排序 直接插入排序二分插入排序Shell排序 选择排序 简单选择排序堆排序 合并排序 基于数字和地址计算的排序方法 计数排序桶排序基数排序 简单排序算法 冒泡排序 void sort(Item a[],i…

跨端分栏布局:从手机到Pad的优雅切换

在 UniApp X 的世界里&#xff0c;我们常常需要解决一个现实问题&#xff1a; “手机上是全屏列表页&#xff0c;Pad上却要左右分栏”。这时候&#xff0c;很多人会想到 leftWindow 或 rightWindow。但别急——这些方案 仅限 Web 端&#xff0c;如果你的应用需要跨平台&#xf…

华为服务器管理工具(Intelligent Platform Management Interface)

一、核心功能与技术架构 硬件级监控与控制 全维度传感器管理:实时监测 CPU、内存、硬盘、风扇、电源等硬件组件的温度、电压、转速等参数,支持超过 200 种传感器类型。例如,通过 IPMI 命令ipmitool sdr elist可快速获取服务器传感器状态,并通过正则表达式提取关键指标。 远…

Node.js Express keep-alive 超时时间设置

背景介绍随着 Web 应用并发量不断攀升&#xff0c;长连接&#xff08;keep-alive&#xff09;策略已经成为提升性能和资源复用的重要手段。本文将从原理、默认值、优化实践以及潜在风险等方面&#xff0c;全面剖析如何在 Node.js&#xff08;Express&#xff09;中正确设置和应…

学习C++、QT---30(QT库中如何自定义控件(自定义按钮)讲解)

每日一言你比想象中更有韧性&#xff0c;那些看似艰难的日子&#xff0c;终将成为勋章。自定义按钮我们要知道自定义控件就需要我们创建一个新的类加上继承父类&#xff0c;但是我们还要注意一个点&#xff0c;就是如果我们是自己重头开始造控件的话&#xff0c;那么我们就直接…

【补充】Linux内核链表机制

专题文章&#xff1a;Linux内核链表与Pinctrl数据结构解析 目标&#xff1a; 深入解析Pinctrl子系统中&#xff0c;struct pinctrl如何通过内核链表&#xff0c;来组织和管理其多个struct pinctrl_state。 1. 问题背景&#xff1a;一个设备&#xff0c;多种引脚状态 一个复杂的…

本地部署Dify、Docker重装

需要先安装一个Docker&#xff0c;Docker就像是一个容器&#xff0c;将部署Dify的空间与本地环境隔离&#xff0c;避免因为本地环境的一些问题导致BUG。也确保了环境的统一&#xff0c;不会出现在自己的电脑上能跑但是移植到别人电脑上就跑不通的情况。那么现在就开始先安装Doc…

【每天一个知识点】非参聚类(Nonparametric Clustering)

ChatGPT 说&#xff1a;“非参聚类”&#xff08;Nonparametric Clustering&#xff09;是一类不预先设定聚类数目或数据分布形式的聚类方法。与传统“参数聚类”&#xff08;如高斯混合模型&#xff09;不同&#xff0c;非参聚类在建模过程中不假设数据来自于已知分布数量的某…

人形机器人CMU-ASAP算法理解

一原文在第一阶段&#xff0c;用重定位的人体运动数据在模拟中预训练运动跟踪策略。在第二阶段&#xff0c;在现实世界中部署策略并收集现实世界数据来训练一个增量&#xff08;残差&#xff09;动作模型来补偿动态不匹配。&#xff0c;ASAP 使用集成到模拟器中的增量动作模型对…

next.js刷新页面时二级菜单展开状态判断

在 Next.js 中保持二级菜单刷新后展开状态的解决方案 在 Next.js 应用中&#xff0c;当页面刷新时保持二级菜单的展开状态&#xff0c;可以通过以下几种方法实现&#xff1a; 方法1&#xff1a;使用 URL 参数保存状态&#xff08;推荐&#xff09; import { useRouter } from n…

网络基础DAY13-NAT技术

NAT技术internet接入方式&#xff1a;ADLS技术&#xff1a;能够将不同设备的不同信号通过分离器进行打包之后再internet中传输&#xff0c;到另一端的分离器之后再进行分离。传输到不同的设备中去。常见光纤接入方式internet接入认证方式&#xff1a;PPPoE&#xff1a;先认证再…