说起 Spring Cloud Eureka 就要先提 Spring Cloud Netflix,Spring Cloud Netflix 项目是 Spring Cloud 的子项目之一,主要内容是对 Netflix 公司一系列开源产品的包装,它为 Spring Boot 应用提供了自配置的 Netflix OSS 整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

而 Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于 Netflix Eureka 做了二次封装(Netflix 开发的服务发现框架,本身是一个基于 REST 的服务)。

Spring Cloud Eureka(下称 Eureka)包含两个组件:Eureka Server(服务端) 和 Eureka Client(客户端),作用如下:

  • Eureka Server 提供服务发现的能力,即服务注册中心。各个微服务启动时,会向 Eureka Server 注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息。
  • Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互。
  • 微服务启动后会周期性(默认30秒)地向 Eureka Server 发送心跳以续约自己的“租期”。
  • 如果 Eureka Server 在一定时间内没有接收到某个微服务实例的心跳,Eureka Server 将会注销该实例(默认90秒)。
  • 默认情况下,Eureka Server 同时也是 Eureka Client。多个 Eureka Server 实例,相互之间通过复制的方式,来实现服务注册表中的数据的同步。
  • Eureka Client 会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无须每次请求都查询 Eureka Server 的压力;其次即使 Eureka Server 所有节点都宕掉,服务消费者依然可以使用缓存中过的信息找到服务提供者并完成调用。

添加依赖

  • 服务注册中心:eureka-server
    • 作用:服务注册中心提供服务注册功能
  • 服务提供方:eureka-client
    • 作用:注册服务到服务注册中心

本模块作为服务注册中心提供服务注册功能,只需要添加 spring-cloud-starter-netflix-eureka-server 依赖就可以了。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

Eureka 配置

  • application.yml
server:
  port: 9010
spring:
  application:
    name: bh-eureka
eureka:
  instance:
    hostname: bh-eureka
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    eviction-interval-timer-in-ms: 5000
    enable-self-preservation: false

# 服务注册中心端口号
# server.port: 9010
# 服务注册中心注册的服务名称,唯一标识
# spring.application.name: bh-eureka
# 服务注册中心实例的主机名(本地测试,修改host文件127.0.0.1 bh-eureka 即可)
# eureka.instance.hostname: bh-eureka
# 是否向服务注册中心注册自己
# 默认情况下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为
# eureka.client.registerWithEureka: false
# 是否检索服务
# eureka.client.fetchRegistry: false
# 服务注册中心的配置内容,指定服务注册中心的位置
# eureka.client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 清理间隔(单位毫秒,默认是60*1000),开发环境设置如下可快速移除不可用的服务
# server.eviction-interval-timer-in-ms: 5000

启动服务注册中心

在启动类上添加 @EnableEurekaServer 注解,声明这是一个 Eureka Server。

@SpringBootApplication
@EnableEurekaServer
public class RegisterApplication {

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

results matching ""

    No results matching ""