在上一系列中,我们以最简单的业务场景急速入门了微服务,当然了,忽略了很多的细节,作为入门是可以的,但是真正使用的时候,还是需要了解很多额外的使用知识,所以本系列就孕育而生,即在上一系列的基础上继续强化,加深对spring cloud的使用理解。本章首先还是介绍eureka服务注册和发现组件,因为它是微服务的基石。

关于Eureka的基本使用,在另外一篇文章中详细介绍了:7.天气预报系统-微服务的注册和发现,不再赘述。本章学习如何搭建一个eureka高可用集群。

一、前言

首先来看看Eureka高可用的架构。

image

其中,续约是指:服务端维持一个有过期时间的服务列表,当客户端访问一次,我就刷新一下过期时间。

1
2
3
4
# 90秒不来续约就剔除
lease-expiration-duration-in-seconds: 90
# 每隔30秒自动续约一次
lease-renewal-interval-in-seconds: 30

在客户端也可以设置一个定时任务,每隔多长时间去请求一下服务器,刷新一下服务列表:

1
2
# 默认每隔30去请求一下服务器
registry-fetch-interval-seconds: 30

二、总结

Eureka包含两个组件:Eureka ServerEureka Client,它们的作用如下:

  • Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;
  • Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka ClientEureka Server进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息;
  • 微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒);
  • 每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步;
  • Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。

三、集群配置

Server1端配置文件:

1
2
3
4
5
6
7
8
9
10
11
server:
port: 8761
eureka:
instance:
hostname: eureka
client:
service-url:
defaultZone: http://localhost:8762/eureka
spring:
application:
name: eureka-server

Server2端配置文件:

1
2
3
4
5
6
7
8
9
10
11
server:
port: 8762
eureka:
instance:
hostname: eureka
client:
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: eureka-server

就是说两个server互相注册。形成一个server集群。

client1配置文件:

1
2
3
4
5
6
7
8
9
server:
port: 8080
spring:
application:
name: eureka-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

client2也是如此。

1
2
3
4
5
6
7
8
9
server:
port: 8081
spring:
application:
name: eureka-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

分别启动之后,我们会看到效果:

image

关于本系列的所有代码,将按照1-10的章节依次存放在:https://github.com/sunweiguo/swgBook-for-spring-cloud/tree/master/spring-cloud-modules 后面不再赘述。