0%

Eureka简介

Eureka简介

关于Eureka

Eureka是springCloud在一开始的时候推荐使用的注册中心,是Netflix开源的服务发现组件

Eureka包含两个组件:Eureka Server和Eureka Client

Eureka Server提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

EurekaClient是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)。Eureka Client会缓存服务注册表中的信息,这种方式可以使得微服务不需要每次请求都查询Eureka Server,从而降低了Eureka Server的压力,如果Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者完成调用

eureka的高可用性,不需要等注册信息replicate到其他节点,也不保证注册信息是否replicate成功,当数据出现不一致时,虽然A,B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息如果请求A查不到,但请求B就能查到

多个Eureka Server实例之间,互相之间通过复制的方式,来实现服务注册表中数据的同步

服务提供者

服务提供者是作为EurekaClient存在的,其主要工作是

  • 向服务器注册服务
  • 发送心跳给服务器
  • 向服务器获取注册列表

服务调用者

服务调用者也是作为客户端存在的,其主要职责就是发现与调用服务

Eureka Server注册中心配置

依赖

1
2
3
4
5
<!--eureka-server服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

如果是F版及以上的话,需要使用该依赖

1
2
3
4
5
<!--新版本的eureka-server服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
eureka:
instance:
hostname: localhost
# 过期时间,默认90s, 可不配置
lease-expiration-duration-in-seconds: 90
# 续约时间,默认30s,可不配置
lease-renewal-interval-in-seconds: 30
# ip地址优先
prefer-ip-address: true
server:
# 开启自我保护机制,可以在本地测试时关闭,在正式上线时不建议关闭,默认为true
enable-self-preservation: true
# 去除失效服务的时间间隔(毫秒)
eviction-interval-timer-in-ms: 4000
client:
# 启用eureka客户端,默认为true, 可不配置
enabled: true
# 不需要拉取注册表,本身就是注册中心,只需要维护实例,不需要拉取注册,默认为true
# 如果是eureka server集群的话,是需要互相同步的
fetchRegistry: false
# 两个心跳参数,默认都是30s,可不配置
instance-info-replication-interval-seconds: 30
# 拉取服务的间隔 使用定时任务来进行拉取 拉取之后存在localRegionApps中
# 如果Eureka server挂掉之后,请求server进行拉取最新的地址失败,并不会把缓存清空,所以只要所访问的服务地址没变,依然是可以正常访问的
registry-fetch-interval-seconds: 30
# 不向注册中心注册自身,默认为true
registerWithEureka: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 设置与eureka server交互的地址,用来查询服务和注册服务
# 如果是集群的eureka server,需要配置其他server机器的地址,多个地址用逗号分隔
# defaultZone: http://eureka2:7002/eureka,http://eureka3:7003/eureka

启动类

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaServer // 启动Eureka Server相关功能
public class EurekaServerApp {

public static void main(String[] args) {
SpringApplication.run(EurekaServerApp.class,args);
}
}

业务微服务配置

依赖

1
2
3
4
5
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

如果是F版及以上的话,需要使用该依赖

1
2
3
4
5
<!-- 新版 eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka #如果eureka server使用了basic认证的话,地址需要改成http://username:password@localhost:8761/eureka
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
prefer-ip-address: true #以IP地址注册到服务中心,如果为false会使用微服务所在的hostname
ip-address: 192.168.217.211
non-secure-port: 8767
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则),默认30
lease-renewal-interval-in-seconds: 10
#Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己),默认90
lease-expiration-duration-in-seconds: 30
status-page-url: /info #状态页面
health-check-url-path: /health #健康检查页面

启动类

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaClient // 服务启动后注册到Eureka Server注册中心中 也可以使用@EnableDiscoveryClient,对于@EnableEurekaClient只对于Eureka可用,而@EnableDiscoveryClient可以使用任意注册中心服务
public class ProviderApp {

public static void main(String[] args) {
SpringApplication.run(ProviderApp.class,args);
}
}

欢迎关注我的其它发布渠道