Life with teacher Lemon.

Spring Cloud Eureka 注册中心

2020.03.21 | 共 831 字,阅读需约 2 分钟.

Eureka 是 Netflix 开源的服务注册中心,是Spring Cloud 的重要组成部分,完整的实现了服务注册服务发现
Eureka 将数据完全存储于内存中,对于注册的服务本身,需要维持心跳。
下面我们将基于 Spring Cloud :Hoxton.SR3;SpringBoot :2.2.5.RELEASE 版本分别介绍 Eureka 注册中心的独立模式和集群模式。

首先看一下我们的项目结构:详见 spring-cloud-examples

spring-cloud-exampls  
|-|-spring-cloud-eureka  
|-|-|-pom.xml
|-|-spring-cloud-eureka-provider  
|-|-|-pom.xml
|-|-spring-cloud-eureka-consumer
|-|-|-pom.xml
|-|-...
|-pom.xml 

独立模式

  • 添加 Eureka 依赖包
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

注意: 其他依赖通过 maven dependencies 传递,此处只单独添加 Eureka 服务端依赖

  • 编写服务启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  • 配置注册中心 application.properties 文件
# 设置端口号
server.port=5000
# 给当前服务取一个名字
spring.application.name=eureka
# 实例名称
eureka.instance.hostname=one
eureka.instance.instance-id=${spring.application.name}:${server.port}
# register-with-eureka 设置为 false,表示当前项目不要注册到注册中心上
eureka.client.register-with-eureka=false
# 表示是否从 Eureka Server 上获取注册信息
eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  • 启动服务
java -jar spring-cloud-eureka-1.0.0.jar
  • 查看 http://localhost:5000 是否启动成功

独立模式

排坑

  • Eureka 本身既是注册中心,也是一个独立的服务,在独立模式下需要防止对自身的注册,开启以下配置
# register-with-eureka 设置为 false,表示当前项目不要注册到注册中心上  
eureka.client.register-with-eureka=false  
# 表示是否从 Eureka Server 上获取注册信息  
eureka.client.fetch-registry=false  
  • 独立模式启动后,需要保证以下 hostname 配置一致,防止节点 hostname 不一导致管理节点不可用,出现在 unavailable-replicas
# 实例名称
eureka.instance.hostname=one
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

另外 hostname 需要配置 hosts 文件中,此处自行配置,不再赘述。

集群模式

  • 集群配置文件
    集群模式,不需要改变启动类,只需要修改配置文件。本文在原 application.properties 的基础上新增修改以下三个文件.
application-one.properties
application-three.properties
application-two.properties

: 此处文件命名遵循 application-xxx.properties 格式

  • application-one.properties ,其他两个大同小异,换掉 profiles、hostname 及 defaultZone
spring.profiles=one
# 设置端口号
server.port=5001
# 给当前服务取一个名字
spring.application.name=eureka
# 实例名称
eureka.instance.hostname=one
eureka.instance.instance-id=${spring.application.name}:${server.port}
# register-with-eureka 设置为 false,表示当前项目不要注册到注册中心上, 集群时设置为true
eureka.client.register-with-eureka=true
# 表示是否从 Eureka Server 上获取注册信息
eureka.client.fetch-registry=true

eureka.client.serviceUrl.defaultZone=http://two:5002/eureka/,http://three:5003/eureka/

: 记得需要同步在 hosts 文件中设置解析

  • 分别启动三个节点
java -jar spring-cloud-eureka-1.0.0.jar --spring.profiles.active=one
java -jar spring-cloud-eureka-1.0.0.jar --spring.profiles.active=two
java -jar spring-cloud-eureka-1.0.0.jar --spring.profiles.active=three
  • 查看管理界面信息

集群模式

  • 测试 down 掉 one 节点

服务下线

集群剩余节点

排坑

集群模式下,需要将每个节点也注册到注册中心去

# register-with-eureka 设置为 false,表示当前项目不要注册到注册中心上, 集群时设置为true
eureka.client.register-with-eureka=true
# 表示是否从 Eureka Server 上获取注册信息
eureka.client.fetch-registry=true

至此,Eureka 服务独立模式和集群模式配置完毕。

发表评论
今日诗词