一、eureka的原理和作用(尤利卡)
1.消费者该如何获取服务提供者具体信息?
服务提供者启动时向
eureka
注册自己的信息
eureka
保存这些信息
消费者根据服务名称向
eureka
拉取提供者信息
2.如果有多个服务提供者,消费者该如何选择?
服务消费者利用
负载均衡
算法,从服务列表中挑选一个
3.消费者如何感知服务提供者健康状态?
服务提供者会每隔
30
秒向
EurekaServer
发送心跳请求,报告健康状态
eureka
会更新记录服务列表信息,心跳
不正常会被剔除
消费者就可以拉取到最新的信息
在Eureka架构中,微服务角色有两类:
EurekaServer:服务端(注册中心)
EurekaClient
:客户端,包括两个:
Provider:服务提供者
Consumer:服务消费者
(一)搭建EurekaServer
搭建EurekaServer服务步骤如下:
1.
创建项目,引入
spring-cloud-starter-
netflix
-eureka-server
的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> #注意这里是-server
</dependency>
2.
编写启动类,添加
@EnableEurekaServer
注解
3.
添加
application.yml
文件,编写下面的配置:
spring:
application:
name: eurekaserver #eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
(二)注册user-service
将user-service服务注册到EurekaServer步骤如下:
1.
在
user-service
项目引入
spring-cloud-starter-
netflix
-eureka-client
的
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
#注意这里是-cliebt
</dependency>
1.在application.yml文件,编写下面的配置:
spring:
application:
name: userservice #server的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
(三)在order-service完成服务拉取
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
1.
修改
OrderService
的代码,修改访问的
url
路径,用服务名代替
ip
、端口:
String url = "http://userservice/user/" + order.getUserId();
2.在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
(四)总结
1.
搭建
EurekaServer
•
引入
eureka-server
依赖
•
添加
@EnableEurekaServer
注解
•
在
application.yml
中配置
eureka
地址
2.
服务注册
•
引入
eureka-client
依赖
•
在
application.yml
中配置
eureka
地址
3.
服务发现
•
引入
eureka-client
依赖
•
在
application.yml
中配置
eureka
地址
•
给
RestTemplate
添加
@LoadBalanced
注解
•
用服务提供者的服务名称远程调用
二、Ribbon的原理和作用(丝带、功能区、瑞本)
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法
1.
Ribbon
负载均衡规则
规则接口是
IRule
默认实现是
ZoneAvoidanceRule
,根据
zone
选择服务列表,然后轮询
2.
负载均衡自定义方式
代码方式:配置灵活,但修改时需要重新打包发布
配置
方式:直观,方便,无需重新打包发布,但是无法做全局配置
3.
饥饿加载
开启饥饿加载
指定饥饿加载的微服务名称
饥饿加载:
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: userservice # 指定对userservice这个服务饥饿加载
开启饥饿加载能够有一定的提升访问速度。
注:资料收集来源于B站的黑马程序员视频教程。