1 Eureka 简介
Eureka 是Netflix 开源的服务发现组件, Spring Cloud 将其集成在 Spring Cloud Netflix 中,实现服务的注册和发现。Eureka 主要包含两个组件: Eureka Server 和 Eureka Client。 两者的作用如下:
- Eureka Server 提供服务发现的功能, 各个微服务会将自己的信息注册到Eureka Server。
- Eureka Client 即服务提供者,将其信息注册到Eureka Server上面。
- 微服务会周期性(默认30秒)地向Eureka Server 发送心跳以维持自己的注册状态,如果Eureka Server 在一定时间(默认90秒)没有接受到某个微服务实例的心跳,Eureka Server 将会注销该实例。
- 默认情况下,Eureka Server 同时也是 Client, 多个Eureka Server 实例之间可以通过复制的方法, 来实现服务注册表数据的同步。
- Eureka Client 会缓存服务注册表中的信息,所以 Eureka Client 无须每次调用微服务都要先查询Eureka Server,能有效地缓解Eureka Server的压力,而且即使所有的Eureka Server节点都宕掉,Client 依然可以根据缓存中信息找到服务提供者。
2 创建Eureka Server
创建一个Eureka Server 的步骤主要如下(用Maven构建的Spring Boot项目):
- 添加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
- 在启动类使用
@EnableEurekaServer
声明该应用为Eureka Server
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerDemoApplication.class, args);
}
}
到这里,其实该Eureka Server 已经可以启动使用。不过为了更好地使用,可以添加下面的配置。
- 添加配置:
server:
port: 8001
eureka:
client:
register-with-eureka: false
fetch-registry: false
- eureka.client.register-with-eureka 属性表示是否将自己注册到Eureka Server, 默认为true。 由于当前应用就是Eureka Server, 因此设为 false;
- eureka.client.fetch-registry 表示是否从Eureka Server获取注册信息,默认为true。 如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,可以设为false。
3 创建Eureka Client
- 添加Maven依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 在启动类使用
@EnableDiscoveryClient
或者@EnableEurekaClient
声明该应用为Eureka Client
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientDemoApplication.class, args);
}
}
@EnableDiscoveryClient
或者@EnableEurekaClient
的区别在于前者是后者的抽象。在Spring Cloud 中,服务发现组件有多种,@EnableDiscoveryClient
为各种服务组件提供了支持,而@EnableEurekaClient
则只能与Eureka一起工作。在Edgware版本之后,不再需要添加该注解。
- 添加配置:
server:
port: 8002
spring:
application:
name: eureka-client-demo
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
eureka.client.service-url.defaultZone 用于设置与Eureka Server 交互的地址
网友评论