Spring Cloud - Eureka

Eureka

在Spring Cloud体系中,eureka承担着服务注册与发现的任务,在整个微服务架构中起着整合作用。eureka的一些概念:

服务提供者

provider,指一个将自身的功能接口暴露出来的应用。

服务消费者

consumer,指需要借助provider提供的功能完成自身业务的应用。

服务注册

当provider应用启动时,会将自身的元数据,比如IP地址,端口,应用名等注册到eureka server中。

服务续约

provider每搁固定的时间段(默认30秒),向eureka server汇报一次自身状况,如果eureka server在固定的时间段(默认90秒)内没有收到某一provider的服务续约的请求,将会把这个provider实例从服务列表中剔除。

获取注册信息

consumer应用会定时从eureka server获取服务注册列表信息以供自身进行远程调用,consumer应用默认每30秒会更新一次注册列表信息,默认eureka server和consumer应用使用压缩的json进行交互。

服务下线

provider应用关闭时,会向eureka server发送下线请求,eureka server收到请求后会将此provider实例信息从服务注册列表中剔除。

Eureka Server

添加eureka server依赖

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

application.yml 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server:
  port: 8761 # 服务端口

spring:
  application:
    name: eurekaServer # 服务名
eureka:
  environment: devlopment # eureka server环境
  instance:
    lease-renewal-interval-in-seconds: 10 # 发送心跳的间隔时间
    lease-expiration-duration-in-seconds: 30 # 若这个时间段没收到心跳则移除该instance
    prefer-ip-address: true # 实例名称显示IP配置

  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ # eureka server的地址
    register-with-eureka: true # 此服务是否注册到eureka server上
  server:
    enable-self-preservation: false # 关闭自我保护模式
    eviction-interval-timer-in-ms: 4000 # 扫描失效服务间隔(单位ms, 默认是60 * 1000)
    wait-time-in-ms-when-sync-empty: 0

debug: true # debug 模式

加入@EnableEurekaServer注解

1
2
3
4
5
6
7
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

只需这简单的配置,就已经搭建了一台eureka server应用。

Eureka Client

添加eureka依赖

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

application.yml 配置

1
2
3
4
5
6
7
8
9
server:
  port: 8080
debug: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true   #将自己的IP注册到eureka server上,如不配置则表示注册微服务所在操作系统的hostname到eureka server

加入@EnableDiscoveryClient注解

1
2
3
4
5
6
7
8
9
10
11
/**
 * TODO
 * Created by jinzili on 09/06/2017.
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderUserApplication.class, args);
    }
}

现在我们已经搭建好了一台Eureka Server 和一台provider,访问http://localhost:8761看看效果!
image

perfect!

我们的两个服务已经注册到了Eureka Server上,上图的红字是因为我们在Eureka Server服务的application.yml配置了eureka.server.enable-self-preservation: false 关闭了自我保护模式,推荐在开发中我们使用此配置,可以及时刷新服务的最新状态,但是切记在生产环境使用要开启自我保护模式。

评论