🌥️SpringCloud实战-服务注册中心之Eureka Server
服务注册与发现组件之Eureka
。
Eureka
整体架构
Eureka
是Netflix
开源的服务发现组件,本身是一个基于REST
的服务。它包含Server
和Client
两部分。Spring Cloud
将它集成在子项目Spring Cloud Netflix
中,作为微服务套件中的服务治理组件,实现服务注册与发现功能。整体架构图如下:
主要包含两个角色:
Server
端:注册中心,提供服务注册与发现功能。Client
端:服务提供者和服务消费者。
服务调用流程如下:
- 服务提供者
Application Service
在启动时向注册中心Eureka Server
注册自己提供的服务。 - 服务消费者
Application Client
在启动时从注册中心Eureka Server
订阅自己所需的服务。 - 注册中心返回服务提供者的地址(
IP
和端口等)列表信息。服务消费者本地进行缓存。 - 服务消费者在调用时根据负载均衡策略从提供者地址列表中选择一个地址进行调用。
微服务启动后,会周期性(默认30s
)地向Eureka Server
发送心跳以续约自己的“租期”。如果Eureka Server
在一定时间内没有接收到某个微服务实例的心跳,Eureka Server
将注销该实例(默认90s
)。
单节点Eureka
注册中心
在IDEA
中创建一个名叫eureka-server
的maven
工程,然后在pom.xml
中引入以下依赖:
1 | <!-- version --> |
然后编写启动类EurekaServerApplication
,使用@EnableEurekaServer
注解开启eureka-server
注册中心功能。完整代码如下:
1 | package com.sunchaser.sparrow.microservice.springcloud.eureka.server; |
接下来在src/main/resources
目录下创建application.properties
配置文件,并添加以下配置项:
1 | eureka-server = |
启动该eureka-server
项目,在浏览器中打开http://localhost:520
,可看到该注册中心相关信息。
至此,一个单节点的eureka-server
注册中心就搭建完成。只不过还没有微服务进行注册。
高可用Eureka
注册中心
在实际微服务项目中,注册中心作为微服务之前通讯的桥梁,我们很有必要对其集群部署来保证高可用。
下面我们来搭建双节点Eureka
注册中心集群来保证高可用。由于我们是在自己的笔记本电脑上做演示,所以只能做到伪集群:即同一台机器不同的端口。
在src/main/resources
目录下新建两个配置文件,分别为application-instance1.properties
和application-instance2.properties
。我们只需要为其配置两个不同的端口号即可。
1 | 520 = |
1 | 521 = |
然后我们来修改application.properties
配置文件:
1 | eureka-server = |
在IDEA
中启动双实例
由于IDEA
默认只能单实例运行,所以需要先修改Run/Debug Configurations
配置:点击Edit Configurations...
,找到EurekaServerApplication
的启动配置,勾选Allow parallel run
后点击OK
保存。
低版本IDEA
对应的勾选项是Single instance only
。
启动步骤:
1、将application.properties
配置文件中的spring.profiles.active
配置项设置为instance1
后启动项目。
2、修改application.properties
配置文件中的spring.profiles.active
配置项为instance2
后再次启动项目。
先启动的实例会在控制台输出一些异常堆栈信息,这是因为先启动的instance1
实例会尝试注册到instance2
实例中去,而这时instance2
实例并未启动,所以会抛出异常,但这并不影响注册中心的启动,等到instance2
实例正常启动后,instance1
实例会通过心跳重连机制重新注册至instance2
。
全部启动成功后,在浏览器打开http://localhost:520
或http://localhost:521
,可看到两个实例相互注册成功。
至此,一个高可用双节点eureka-server
注册中心集群就搭建完成。
使用IP
地址注册服务
上面我们是设置主机名host
为localhost
进行服务注册的,一旦我们的微服务发布至云服务器,需要在互联网上进行访问时,我们使用host
注册就需要一个域名,但这并不是必需的,我们还可以直接使用服务器的IP
来进行服务注册。
将application.properties
配置文件修改为如下:
1 | # 使用host注册 |
注释掉host
注册的配置项,开启eureka.instance.prefer-ip-address
配置项使用IP
地址注册,然后修改eureka.client.service-url.defaultZone
配置项指定IP
地址。
在application-instance1.properties
和application-instance2.properties
中分别指定instance-id
:
1 | instance1 = |
1 | instance2 = |
重新启动双实例即可使用IP
地址进行注册。

- 微信
- 支付宝