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
相关推荐
坤坤子吖6 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd7 小时前
后端相关学习笔记。
笔记·学习
旖旎夜光8 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
橙橙笔记11 小时前
QT的学习第四部分
linux·qt·学习·音视频
叼烟扛炮11 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
在猴站学算法11 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
旖旎夜光11 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习
Godspeed Zhao11 小时前
从零开始学AI24——无监督学习之K均值
学习·机器学习
叼烟扛炮12 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt
La Pulga1 天前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统