SpringCloud学习路线(3)—— Eureka注册中心

一、导引

服务调用出现的问题

  • 服务调用采取的请求地址是静态的,当我们使用服务集群时,很容易造成只能调用固定的微服务上的接口。
  • 多个提供者,消费者的使用对象无法确定
  • 消费者无法得知提供者的状态

二、Eureka注册中心

(一)作用:

  • 消费者如何获取服务提供者具体信息
    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存提供者信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态
    • 服务提供者每隔30s向EurekaServer发送心跳请求,报告健康状态
    • eureka更新记录服务列表信息,心跳不正常会被剔除
    • 消费者拉取最新信息

(二)、搭建Eureka注册中心

1、引入spring-cloud-starter-netflix-eureka-server

xml 复制代码
<dependency>
	<gourpId>org.springframework.cloud</gourpId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2、编写启动类,添加@EnableEurekaServer注解
3、添加application.yml

yml 复制代码
server:
	port: 10080 #服务端口
	
spring:
	application:
		name: eurekaserver #服务名称
eureka:
	client:
		serverice-url:
			defaultZone: http://127.0.0.1:10080/eureka/ #地址信息

(三)服务注册

1、添加eureka客户端依赖

xml 复制代码
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>sprin-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、在提供者的配置文件中,添加配置信息

yml 复制代码
server:
	port: 10080 #服务端口
	
spring:
	application:
		name: userservice#服务名称
eureka:
	client:
		serverice-url:
			defaultZone: http://127.0.0.1:10080/eureka/ #地址信息

(四)服务拉取

服务拉取是基于服务名称获取服务列表,容纳后对服务列表做负载均衡.。

1、修改Service实现类,访问路径改为String url = "服务名" + order.getUserId

2、对RestTemplate添加负载均衡注释

java 复制代码
@Bean
@LoadBalanced //负载均衡
public RestTemplate restTemplate(){
	return new RestTemplate();
}

(五)Ribbon 负载均衡

1、负载均衡的原理

负载均衡流程


Ribbon负载均衡实现过程

2、负载均衡的策略 IRule

(1)负载均衡策略表

内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。(默认)
AvailabilityFilteringRule 对以下两种服务器忽略: (1)在默认情况下,服务器如果3次连接失败,则被设置为"短路"。"短路"状态将持续30s,若无法连接,则增加短路持续时间。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其省略,并发连接数上限,可由客户端的【clientName】、【clientConfigNameSpace】、【ActiveConnectionsLimit】进行配置
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重越小。这个规则会随机选择服务器,这个权重会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解一个机房,一个机架等。而对Zone内多个服务做轮询。
BestAvailablerRule 忽略短路服务器,并选择并发数较低的服务器
RandomRule 随机选择一个可用服务器
RetryRule 重试机制的选择逻辑

(2)负载均衡规则修改

方式一:在启动类中定义一个新的IRule

java 复制代码
@Bean
public IRule randomRule(){
	return new RandomRule();
}

方式二:在配置文件中修改规则

yml 复制代码
userservice:
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #随机负载均衡规则

3、饥饿加载

Ribbon默认采用 懒加载,即【第一次访问时才会去创建LoadBalanceClient】,请求时间会很长。

(1)饥饿加载的作用: 在项目启动时创建,降低第一次访问的耗时。
(2)配置饥饿加载:

yml 复制代码
ribbon:
	eager-load:
		enabled: true #开启饥饿加载
		clients: 
			- userservice #指定多个服务进行饥饿加载
			- XXservice
相关推荐
1candobetter9 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
追风筝的人er9 天前
企业管理系统如何实现自定义首页与千人千面?RuoYi Office 给出了完整方案
vue.js·spring boot·spring cloud
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛9 天前
计算机系统概论——校验码
学习
babe小鑫9 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习