当前位置: 首页 > news >正文

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

目录

一、相关文章

二、兼容说明

三、服务注册到EurekaServer

四、服务发现

五、LoadBalancer负载均衡


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

  • Eureka服务端启动:Eureka服务端启动-CSDN博客

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

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

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

  • 如果想使用Ribbon做负载均衡,参考Eureka+Ribbon实现服务注册与发现-CSDN博客。

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

三、服务注册到EurekaServer

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" }  
}  

2、子工程build.gradle引入eureka-client

//eureka-client  
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'//order-service引入springcloud2021开始,使用loadbalancer处理客户端负载均衡  
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'

3、子工程application.yml配置

eureka:  client:  service-url:  defaultZone: http://127.0.0.1:10086/eureka/

4、启动多个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;  
}
五、LoadBalancer负载均衡

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

  • 默认提供了两种不同的负载均衡器,分别是:RandomLoadBalancer(随机负载均衡器)和RoundRobinLoadBalancer(轮询负载均衡器)

2、指定使用随机策略

  • 创建一个类CustomLoadBalancerConfiguration

  • OrderApplication加注解@LoadBalanced、@LoadBalancerClients

/**  
* Spring Cloud LoadBalancer替代Ribbon实现 随机/轮询 方式负载均衡策略配置  
*/  
public class CustomLoadBalancerConfiguration {  /**  * 自定义负载均衡策略(随机/轮询)  *  * @return ReactorLoadBalancer  */@Bean  ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory factory) {  String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);  //随机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();  }  
}

http://www.lryc.cn/news/594380.html

相关文章:

  • 限流算法与实现
  • Shell脚本-tee工具
  • Kafka 在分布式系统中的关键特性与机制深度解析
  • kotlin Flow快速学习2025
  • PostgreSQL实战:高效SQL技巧
  • 【LeetCode刷题指南】--反转链表,链表的中间结点,合并两个有序链表
  • 基于单片机无线防丢/儿童防丢报警器
  • 数据结构 | 栈:构建高效数据处理的基石
  • 【2025最新版】PDFelement全能PDF编辑器
  • [硬件电路-58]:根据电子元器件的控制信号的类型分为:电平控制型和脉冲控制型两大类。
  • LockFile简要分析
  • 《镜语者》
  • RocketMQ学习系列之——MQ入门概念
  • 【基础】——股票市场基础知识宏观
  • 无 sudo 权限的环境下将 nvcc (CUDA Toolkit) 安装到个人目录 linux
  • 【c++】200*200 01灰度矩阵求所有的连通区域坐标集合
  • Numpy库,矩阵形状与维度操作
  • 本地部署 Claude 大语言模型的完整实践指南
  • 数据治理,治的是什么?
  • 建筑墙壁损伤缺陷分割数据集labelme格式7820张20类别
  • 【华为机试】169. 多数元素
  • Spring Cloud Gateway 电商系统实战指南:架构设计与深度优化
  • 最大子数组和问题-详解Kadane算法
  • 数学建模--matplot.pyplot(结尾附线条样式表格)
  • 力扣 hot100 Day50
  • 10-day07文本分类
  • Node.js:常用工具、GET/POST请求的写法、工具模块
  • 《剥开洋葱看中间件:Node.js请求处理效率与错误控制的深层逻辑》
  • Node.js worker_threads 性能提升
  • 最新轻量美化表白墙系统源码v2.0 带后台版 附搭建教程