Eureka基础
# Eureka基础
Eureka注册中心是服务端,所有微服务是客户端。

- 消费者根据服务名称利用负载均衡算法向Eurake拉取提供者
- 提供者每30秒向注册中心发送心跳请求,注册中心会把心跳不正常的服务剔除
# 1.配置Eureka服务端
- 引入maven坐标依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1
2
3
4
2
3
4
- 启动类上添加注解@EnableEurekaServer
- springboot配置文件中添加①服务端口②客户端的url地址信息
server:
port: 10086
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 2.配置注册Eureka客户端
- 在user-service(微服务项目)引入maven坐标依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
1
2
3
4
2
3
4
- springboot.yml文件添加配置
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
1
2
3
4
5
6
7
2
3
4
5
6
7
- 复制多个服务实例:右键服务copy configuration->modify options->program arguments->--server.port=8082
# 3.服务发现
- 修改restTemplate.getForObject()方法的url地址,使用服务名代替ip和端口
String url = "http://userservice/user/" + order.getUserId();
1
- 在消费者的启动类中的RestTemplate添加负载均衡注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
1
2
3
4
5
2
3
4
5
# 4.Ribbon负载均衡
- 负载均衡流程
根据URL向注册中心拉取对应服务(地址),并根据负载均衡策略最终返回一个服务,消费者调用。
- 源码分析
本质上是一个拦截器,实现了interceptor方法,其中根据URL的服务名称先去注册中心返回服务列表,返回的服务列表(localhost:8081,localhost:8082)会向IRule基于各种规则(随机,轮询)选择服务,最后修改url发起请求。整个过程都是Client做的。
public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {}
1

- 负载均衡策略
1.轮询2.随机
3.zone轮询(优先选择和消费者在同一个地域或者机房的服务,然后再进行轮询),IRule默认实现是这种方式
配置方法:在消费者服务的springboot配置文件中添加
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# 负载均衡规则
1
2
3
2
3
- 懒加载
懒加载:Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 饥饿加载:在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: userservice # 指定对userservice这个服务饥饿加载
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57