概述
eureka是springcloud的注册中心。
是一款基于rest的服务治理框架,用于实现微服务架构中的服务发现和负载均衡。
在eureka体系中,有两种角色: 服务提供者和服务消费者。
服务提供者将自己注册到eureka服务器,服务消费者从eureka服务器中获取可用的服务列表,并根据负载均衡算法选择其中一个来调用。
特点
-
高可用性:eureka服务器采用了分布式架构,可以通过集群搭建来实现高可用性,同时也支持自我保护机制,即当eureka服务器在一段时间内无法与客户端通信时,不会立即清理服务注册表中的信息,而是将其保护起来,以防止因网络问题导致的误删。
-
易于扩展:eureka支持通过集群方式进行扩展,只需要增加新的eureka服务器节点即可。
-
支持多种语言和框架:eureka是基于rest实现的,因此可以支持多种语言和框架,只需要遵循它的api规范即可。
-
灵活的配置:eureka提供了大量可配置项,如心跳间隔、注册信息缓存时间等,可以根据实际情况进行配置。
-
易于使用:eureka提供了java客户端库,可以方便地进行服务注册和发现,并且与spring cloud等框架集成良好。
结构和作用
-
注册服务信息
服务提供者的服务实例启动后,将自己的信息注册到eureka-server(eureka服务端)
eureka-server保存服务名称到服务实例地址列表的映射关系 -
服务发现/服务拉取
服务消费者根据服务名称,拉去实例地址列表 -
负载均衡
服务消费者从实例列表中利用负载均衡算法选中一个实例地址 -
远程调用
服务消费者向实例地址发起远程调用 -
心跳续约
- 服务提供者实例会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳
- 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
- 服务消费者拉取服务时,就能将故障实例排除了
注意:一个微服务,既可以是服务提供者,又可以是服务消费者,因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端
实现eureka
- 创建eureka-server服务
新建模块,并在spring initialize中选择eureka server的依赖
可以看到在新建模块的依赖中加入了
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-server</artifactid>
</dependency>
-
在eureka的启动类上加上@enableeurekaserver注解
开启eureka的注册中心功能 -
编写配置文件
编写一个application.yml文件,内容如下:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
-
启动服务并访问
http://127.0.0.1:10086
如上页面表示成功 -
服务注册
在对应服务的pom.xml中引入eureka-client依赖
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
- 修改服务的配置文件
添加服务名称和eureka地址
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
-
启动多个服务实例
复制配置,并且为服务修改名称
在配置中需要修改配置中的端口号,就需要使用覆盖配置
勾选允许多个实例
启动多个服务实例后,可在该服务的空间中看到服务空间中数量增多,并且占用2个端口号
-
服务发现
服务发现、服务注册统一封装在eureka-client依赖中,所以同样注入该依赖即可
同样需要修改配置文件,同样是服务名称和注册中心地址
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
- 服务拉取和负载均衡
从服务注册中心eureka-server中拉去服务的实力列表并实现负载均衡
需要在服务消费者的启动类上的resttemplate这个bean添加@loadbalanced
注解
然后在对应服务中将resttemplate的url中的ip:port改为服务名即可
spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。
示例:
将http://localhost:8081/user/
改为http://userservice/user/
发表评论