本文不是初学开始的,在有点基础上的是查漏补缺。
起言:服务治理概念
Spring Cloud
提供了多种组件发现的支持,例如 Eureka、Consul、Zookeeper等。
一个服务治理组件应该具有以下三个功能:
服务注册表
服务治理组件的核心,它用来记录各个微服务的信息,比如说微服务的名称、IP、端口等。服务注册组件提供查询 API 和管理 API,查询 API 用来查询可用的微服务实例,管理 API用于服务的注册和注销。
服务注册与发现
- 服务注册是指微服务在启动时,将自己的信息注册到服务治理组件上的过程。
- 服务发现是指查询可用微服务列表及其网络地址的机制。
服务检查
服务治理组件使用一定机制定时检测已注册的服务,是否在线,或者是否无法连接等,若发现无法访问,就会从服务注册表中移除该实例,进行下线操作。
一、What’s Eureka
Eureka
是Netflix
开源的服务发现组件,本身是一个基于 REST 的服务。它包含 Server 和 Client 两部分。Spring Cloud 将它继承自了子项目 Spring Cloud Netflix
中。以下六点内容取自周立的《Spring Cloud 与 Docker 微服务架构与实战》第二版,对 Eureka的一些特性描述得还不错,先来看看:
Eureka Server
提供了服务发现的能力,微服务启动时,会向Eureka
发送自己的信息(ip、port、微服务名称等),Eureka Server
会将这些信息存储起来;Eureka Client
是一个 Java 客户端,用于简化与Eureka
的交互。只需要几行配置文件、注解就可以实现注册到Eureka
上;- 微服务启动后,会周期性(默认30 s)向
Eureka Server
发送心跳以续约自己的“租期”; - 如果
Eureka Server
在一定的时间内没有收到某个微服务实例的心跳, Eureka Server 将注销该实例(默认为90 s); - 默认情况下,
Eureka Server
同时也是Eureka Client
。多个Eureka Server
实例相互之间通过复制的方式来实现服务注册表中数据的同步; Eureka Client
会缓存服务注册表中的信息。这种方式有一定的优势——首先,不需要每次都请求查询Eureka Server
,从而降低了Eureka Server
的压力;其次,即使 Eureka Server 所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。
综上所述:Eureka 通过心跳检测机制、客户端缓存机制,提高了系统的灵活性,可伸缩性和可用性。
二、How to use Eureka
2.1 Maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
注意:E 版本 之前(包括E版本)是引入spring-cloud-starter-eureka-server
。
2.2 关于配置文件(重要)
我在本地新建了一个Spring Boot 工程,在 appication.yml
里面配置如下:
# server参数
server:
port: 8761
tomcat:
uri-encoding: utf-8
# spring 参数
spring:
application:
name: pro-eureka
# Eureka 参数
eureka:
instance:
# 实例的主机名称
hostname: localhost
client:
# 不要向注册中心 Eureka 注册它自己
register-with-eureka: false
# 是否从 Eureka Server 获取注册信息,默认为 true,当前是单点的 Eureka Server,不需要同步其他节点的数据,所以false
fetch-registry: false
service-url:
# 指定服务注册中心地址,这里指向了本服务,假如多个地址,直接使用逗号分隔
defaultZone: http://${
eureka.instance.hostname}:${
server.port}/eureka/
2.3 主类配置
然后在主类上添加@EnableEurekaServer
注解。这样子就可以简单启动一个 Eureka 了。
需要注意的是,最后的defaultZone
参数不写时,默认就是http://localhost:8761/eureka
。
三、微服务注册
3.1 Maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2 配置文件(重要)
server:
port: 9001
tomcat:
uri-encoding: UTF-8
spring:
application:
name: pro-product
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
# 启用ip配置,如果不配置该属性或将该属性配置成 false,则表示注册微服务所在操作系统的 hostname 到 Eureka Server
p