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

目录

一、相关文章

二、兼容说明

三、服务注册到EurekaServer

四、服务发现

五、LoadBalancer负载均衡


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

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

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

三、服务注册到EurekaServer

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

Groovy 复制代码
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

Groovy 复制代码
//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配置

Groovy 复制代码
eureka:  
	client:  
		service-url:  
			defaultZone: http://127.0.0.1:10086/eureka/

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

四、服务发现

1、在OrderApplication类创建RestTemplate

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

2、服务远程调用

java 复制代码
//示例:在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

java 复制代码
/**  
* 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);
	}  
}
java 复制代码
@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();  
	}  
}
相关推荐
会飞的小蛮猪1 天前
K8s-1.29.2二进制安装-第一章
云原生·容器·kubernetes
周杰伦_Jay1 天前
【大模型数据标注】核心技术与优秀开源框架
人工智能·机器学习·eureka·开源·github
凯新生物1 天前
mPEG-SS-PLGA-DTX:智能药物递送系统
eureka·flink·ffmpeg·etcd
平行云1 天前
实时云渲染支持在网页上运行UE5开发的3A大作Lyra项目
unity·云原生·ue5·webgl·虚拟现实·实时云渲染·像素流送
阿里云云原生1 天前
AI 原生落地成果获认可,阿里云云原生多项案例入选信通院「AI 云」典型示范
云原生
阿里云云原生1 天前
阿里云可观测 2025 年 11 月产品动态
阿里云·云原生·云计算·可观测
阿里云云原生1 天前
LoongSuite:解决 WebSocket 全链路可观测性难题,赋能 AI 应用的实时链路追踪
人工智能·websocket·网络协议·阿里云·云原生·可观测
眠りたいです1 天前
基于脚手架微服务的视频点播系统-服务端开发部分(补充)文件子服务问题修正
c++·微服务·云原生·架构
2501_924064111 天前
2025年微服务全链路性能瓶颈分析平台对比与最佳实践
微服务·云原生·性能优化·架构
可爱又迷人的反派角色“yang”2 天前
zookeeper概念与部署
分布式·zookeeper·云原生