发布于 

eureka基本使用

Eureka组件

Eureka采用CS(Client/Server)架构,所以它包含以下两个组件,分别是服务端和客户端,在CAP原理中遵循AP原则(丢弃了数据的强一致性)

Eureka Server

Eureka Server也就是Eureka的注册中心,主要用于提供对Eureka Client的服务注册功能,它维护了一个可用服务的列表,存储了所有注册到Eureka Server的可用服务的信息,服务列表可以在Eureka Server的管理页面中看到,在默认情况下,Eureka Server在启动后也会自己注册自己,但是在Eureka Server单机部署时,自己注册自己是无意义的。

Eureka Client

Eureka的客户端,也就是微服务系统中一个一个的微服务,启动时会向Eureka Server注册自己,并且在每隔一段时间(默认30秒)会向Eureka Server发送心跳信息(证明自己的存活状态),若它所注册的Eureka Server在多个心跳周期(默认90秒)没有接受到来自Eureka Client的心跳,Eureka Server就会考虑剔除该Eureka Client。

Eureka的服务注册与发现

Eureka的服务注册与发现原理图

  • 服务注册中心:它就是Eureka Server,用于提供服务的注册与发现功能。
  • 服务提供方:它是一个Eureka Client,用于提供服务,它会向服务注册中心注册自己,以供被服务消费方发现并消费服务。
  • 服务消费方:它也是一个Eureka Client,用于消费服务,它会从服务注册中心拉取服务列表,来调用需要的服务。

所以在整个微服务系统中,服务注册中心的重要性非常高,它是服务消费方与服务提供方交流的桥梁,服务提供方需要向服务注册中心注册自己,才能被服务消费方发现,而服务消费方需要从服务注册中心获取服务列表,才能调用服务。

Eureka基本使用

Eureka Server端搭建

  • 引入依赖

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
  • 开启Eureka Server服务

    1
    2
    3
    4
    5
    6
    7
    8
    @SpringBootApplication
    //启用Eureka Server注解
    @EnableEurekaServer
    public class EurekaServerAApplication {
    public static void main(String[] args) {
    SpringApplication.run(EurekaServerAApplication.class, args);
    }
    }

Eureka Client端搭建

  • 引入依赖

    Eureka Client需要引入web,否则程序运行会停止

    1
    2
    3
    4
    5
    6
    7
    8
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
  • 开启Eureka Client服务

    1
    2
    3
    4
    5
    6
    7
    8
    @SpringBootApplication
    //启用Eureka Client注解
    @EnableEurekaClient
    public class EurekaClientAApplication {
    public static void main(String[] args) {
    SpringApplication.run(EurekaClientAApplication.class, args);
    }
    }

Eureka常用配置

Eureka配置主要分为三类,分别是Eureka instanceEureka ClientEureka Server

Eureka instance常用配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
eureka:
instance:
# 服务注册中心的实例名称
hostname: eureka-server-a
# 服务注册中心的实例ID
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
# 服务注册中心的实例IP地址
ip-address: 192.168.3.168
# 相较于hostname,优先使用ip地址
prefer-ip-address: false
# 该服务作为实例向注册中心发送心跳(续约)的时间间隔
lease-renewal-interval-in-seconds: 30
# 服务注册中心多久没有收到该实例的心跳会剔除该实例
lease-expiration-duration-in-seconds: 90

Eureka Client常用配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
eureka:
client:
# 该客户端是否可用,默认为true
enabled: true
# 是否过滤掉非UP的实例,默认为true
filter-only-up-instances: true
# 让eureka-server自己注册自己,默认为true
register-with-eureka: true
# 是否需要向服务注册中心去检索服务实例列表,默认为true
fetch-registry: true
service-url:
# 与服务端注册中心的通信zone和url
defaultZone: http://eureka-server-b:8081/eureka/,http://eureka-server-c:8082/eureka/
# 从注册中心获取服务列表的时间间隔
registry-fetch-interval-seconds: 30
# 连接注册中心超时时间
eureka-server-connect-timeout-seconds: 5
# 对服务端读取超时时间
eureka-server-read-timeout-seconds:

Eureka Server常用配置

根据实际需要使用选择需要的配置

1
2
3
4
5
6
7
8
9
10
11
12
eureka:
server:
# 多长时间更新续约的阈值
response-cache-auto-expiration-in-seconds: 180
# 服务端开启自我保护模式。无论什么情况,服务端都会保持一定数量的服务。避免client与server的网络问题,而出现大量的服务被清除
enable-self-preservation: true
# 开启清除无效服务的定时任务,时间间隔
eviction-interval-timer-in-ms: 600000
# 过期数据是否也提供给client
disable-delta: false
# eureka服务端是否记录client身份的header
log-identity-headers: true

Eureka Dashboard配置

1
2
3
4
5
6
eureka:
dashboard:
# 是否启用仪表盘,默认为true
enabled: true
# 仪表盘的服务路径,默认为/
path: /

Eureka Server集群

三台Eureka Server的application.yml配置文件为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
port: 8080
spring:
application:
name: eureka-server-a
eureka:
instance:
# 服务注册中心的实例名称
hostname: eureka-server-a
# 服务注册中心的实例ID
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
client:
register-with-eureka: false
# 是否需要向服务注册中心去检索服务实例列表,默认为true
fetch-registry: false
service-url:
# 与服务端注册中心的通信zone和url
defaultZone: http://eureka-server-b:8081/eureka/,http://eureka-server-c:8082/eureka/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server:
port: 8081
spring:
application:
name: eureka-server-b
eureka:
instance:
hostname: eureka-server-b # 主机服务端的实例名称
lease-expiration-duration-in-seconds: 9
client:
register-with-eureka: false
fetch-registry: false # 表示自己就是注册中心,自己的职责就是维护服务实例,不需要去检索实例服务列表
service-url:
defaultZone: http://eureka-server-a:8080/eureka/,http://eureka-server-c:8082/eureka/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server:
port: 8082
spring:
application:
name: eureka-server-c
eureka:
instance:
hostname: eureka-server-c # 主机服务端的实例名称
lease-expiration-duration-in-seconds: 9
client:
register-with-eureka: false
fetch-registry: false # 表示自己就是注册中心,自己的职责就是维护服务实例,不需要去检索实例服务列表
service-url:
defaultZone: http://eureka-server-a:8080/eureka/,http://eureka-server-b:8081/eureka/

每台Eureka Server都注册到其他两台服务注册中心上去,且在上面的配置中,可以看到主机的实例名称并不是主机的IP地址,这是因为我们在本地搭建Eureka Server集群服务,所以无法使用不同的IP,此时我们需要修改本地主机的hosts文件,windows的hosts文件位置为C:/Windows/System/drivers/etc/hosts,Mac和Linux的hosts文件位置为**/etc/hosts**,在该文件末尾加上:

1
2
3
127.0.0.1 eureka-server-a
127.0.0.1 eureka-server-b
127.0.0.1 eureka-server-c

启动三台Eureka Server端口,查看任何一台Eureka Server的仪表盘,可以看到其他两台副本,当有一个客户端注册到其中一台服务器上时,Eureka Server会通过数据同步的方式,让客户端也注册到其他的服务注册中心

image-20230329190826233




Copyright © 2023 ChenWei | Powered By Stellar
本站已运行 00 小时 00