一、微服务注册与发现之Eureka

Eureka简介

  • EurekaNetflix开源的服务发现组件,本身是一个基于 REST 的服务。包含ServerClient两部分。Spring Cloud将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现。

Eureka架构图

  • Application Service相当于服务提供者。
  • Application Client相当于服务消费者。
  • Make Remote Call可以理解成调用RESTful API的行为。
  • us-east-1c,us-east-1d等都是 zone,它们都是属于us-east-1这个 Region(Spring Cloud默认的 Region 是us-east-1)
Eureka包含两个组件Eureka ServerEureka Client:
  • Eureka Server提供服务发现能力,各个微服务启动时,会向Eureka Server注册自己的信息,Eureka Server存储这些信息。
  • Eureka Client是一个 Java 客户端,用于简化和Eureka Server的交互。
  • 微服务启动后,会周期性(默认 30s)地向Eureka Server发送心跳以续约自己的租期。
  • 如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认 90s)。
  • 默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例相互之间通过复制的方式来实现微服务注册表中数据的同步。
  • Eureka Client会缓存服务注册表中的信息,这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低Eureka Server的压力;其次,即使Eureka Server所有节点宕机,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。

创建单机Eureka Server

  1. 创建 Maven 工程,pom文件添加已下依赖:
1
2
3
4
5
6
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
  1. 在配置文件application.yml中添加:
1
2
3
4
5
6
7
8
9
10
11
server:
port: 8761
eureka:
client:
# 表明是否将自己注册到Eureka Server中,默认为true。由于当前应用为Eureka Server,设为false。
registerWithEureka: false
# 表示是否从Eureka Server获取注册信息,默认为true,由于这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点数据,设为false。
fetchRegistry: false
# 设置与Eureka Server交互的地址,查询服务个注册服务都需要依赖这个地址。多个地址间可使用,分隔。
serviceUrl:
defaultZone: http://localhost:8761/eureka/
  1. 创建启动类,添加@EnableEurekaServer注解声明是一个Eureka Server
1
2
3
4
5
6
7
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryEurekaApplication.class, args);
}
}

Eureka Server

将微服务注册到Eureka Server

  1. pom文件中添加依赖:
1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在配置文件application.yml中添加:
1
2
3
4
5
6
7
8
9
10
11
12
spring:
application:
# 指定注册到Eureka Server上的应用名称
name: microeservice-provider-user

eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
# 表示将自己的IP注册到Eureka Server
prefer-ip-address: true
  1. 创建启动类。
1
2
3
4
5
6
@SpringBootApplication
public class ProviderUserApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderUserApplication.class, args);
}
}
  • Spring Cloud Edgware之前,要想将微服务注册到Eureka Server,必须在启动类上添加@EnableEurekaClient@EnableDiscoverClient。在Spring Cloud Edgware以及更高版本,只需添加相关依赖,即可自动注册。
  • 若不想讲服务注册到Eureka Server,只需设置spring.cloud.service-register.auto-registration.enabled=false,或@EnableDiscoveryClient(autoRegister = false)即可。
    Eureka Server

Eureka Server的高可用

  1. 修改配置文件application.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
spring:
application:
name: microservice-discovery-eureka-ha
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
---
spring:
# 指定profile=peer1
profiles: peer1
server:
port: 8761
---
spring:
profiles: peer2
server:
port: 8762
  1. IDEA启动两个 Configurations,Program arguments分别设置--spring.profiles.active=peer1--spring.profiles.active=peer2

peer1
peer2


该文章摘自《Spring Cloud 与 Docker 微服务架构实战(第二版)》

以上

LeoQin wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
0%