SpringCloud系列-Eureka服务注册与发现
Eureka服务注册与发现
Eureka是netfix开源的服务发现组件,本身是一个基于Rest的服务。它包含Server和Client两部分。SpringCloud将它集成子项目Spring Cloud Netfix中,从而实现微服务的注册与发现。
- Application service – 服务提供者
- Application client – 服务消费者
- Make Remote Call – 调用Restful API的行为
- us-east-1c、us-east-1d 等都属于us-east-1这个region
- Eureka Server 提供服务发现的能力,各个微服务启动时,会像Eureka Server注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息。
- Eureka Client是一个java客户端,用于简化与Eureka Server的交互
- 微服务启动后,会周期行(默认30s)的向Eureka Server 发送自己的心跳以续约自己的“租期”
- 如果Eureka Server在一定的时间内没有接收到某个微服务示例的心跳,Eureka server将会注销该实例(默认90s)
- 默认情况下,Eureka server同时也是Eureka Client。多个Eureka Server实例互相通过复制的方式来实现服务注册表中的数据同步。
- Eureka Client 会缓存服务注册表中的信息。(如果Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用)
编写Eureka Server:
注:本文通过IDEA基于Springboot的基础创建微服务项目。
- pom.xml:
<!-- 创建一个SpringBoot项目,在pom.xml中加入以下jar包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类:
- 配置文件:
server:
port: 8081
eureka:
client:
#表示是否将自己注册到eureka server,默认为true,由于当前应用就是eureka server,故而设为false
registerWithEureka: false
#表示是否从eureka server获取注册的信息,默认为true.
# 因为这是一个单点的eureka server,不需要同步其他的eureka server节点的数据,故而设为false
fetchRegistr: false
#设置与Eureka server交互的地址,查询服务和注册服务都需要
# 依赖这个地址。默认是http:localhost:8086/eureka;多个地址见可使用,分割
serviceUrl:
defaultZone: http://localhost:8081/eureka
- 启动测试访问:
当出现上图所示的界面,代表一个Eureka Server就创建好了。该页面展示了很多信息。例如当前示例的系统状态、注册到Eureka Server上的示例服务、常用信息、示例信息的等。
将微服务注册到Eureka server上:
新建三个SpringBoot项目
5. pom.xml:
<!-- 三个项目统一添加-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 配置文件:
server:
port: 8080
spring:
application:
name: test01 #指定注册到Eureka server上的应用名称
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8081/eureka/
instance:
prefer-ip-address: true #表示将自己的IP注册到Eureka server
- 启动测试:
若不想将服务注册到Eureka server,只需要设置spring.cloud.service-registry.auto-registration.enable=false或者在启动类添加注解#EnableDiscoveryClient(auto-Register = false).
搭建Eureka Server集群:
操作步骤:
1. 复制第一个项目 eureka-server新生成另一个新项目。
2. 修改hosts文件。(windows:C:\Windows\System32\dirvers\etc\hosts; Linux/macos: /etc/hosts)
3. 修改配置文件
spring:
application:
name: eureka-server
eureka:
instance:
#要求Client通过ip的方式进行注册
prefer-ip-address: false
lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)
lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务
client:
register-with-eureka: false
fetch-registry: false
server:
enable-self-preservation: false #关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 10000 #续期时间,清理无效服务的时间间隔,默认是60*1000
---
spring:
# 指定profile=peer1
profiles: peer1
eureka:
instance:
# 指定当properfile=peer1时,主机名是peer1
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:8079/eureka/,http://peer3:8077/eureka
server:
port: 8078
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8083/eureka,http://peer3:8077/eureka
server:
port: 8079
---
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
client:
serviceUrl:
defaultZone: http://peer1:8083/eureka,http://peer2:8079/eureka
server:
port: 8077
- 将项目打成jar包,使用命令行启动。
java -jar xxxx --spring.profiles.active=peer1
java -jar xxxx --spring.profiles.active=peer2
java -jar xxxx --spring.profiles.active=peer3
注册服务到Eureka server集群上:
修改上面新建的test01、test02、test03三个项目的配置文件,将其注册到集群中:
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8079/eureka/
访问测试首页:
Eureka的自我保护模式:
访问eureka首页会出现以下警告:
默认情况下,如果Eureka Server在一定时间内没有监听到某个微服务实例的心跳,EurekaServer将注销该实例(默认90s)。但是当网路出现故障,微服务与Eureka Server之间是无法正常通行的,但是此时微服务是正常可用的,Eureka server本身不应该剔除这个微服务。
Eureka通过“自我保护模式”来解决这个问题-----当Eureka server节点在短时间内丢失过多客户端时,那么这个节点就会进入自我保护模式。一旦进入这个模式,Eureka server就会保护服务注册表中的信息,不在剔除服务注册表中的数据。当网络恢复之后,改Eureka Server节点会自动退出自我保护模式。
禁用方式为:
eureka.server.enable-self-preservation = false
参数详解:
结束语:
文章到这里就结束了,本篇文章中所有的项目都是基于Springboot的项目搭建,所以学习SpringCloud还是需要一定的SpringBoot的基础的。
如果您在阅读的过程中有错误的地方还请多多指正,小编及时进行修正,谢谢!
上一篇: 设计模式-工厂模式
下一篇: 简单配置Eureka和Eureka伪集群
推荐阅读
-
SpringCloud之服务注册与发现Spring Cloud Eureka实例代码
-
springcloud干货之服务注册与发现(Eureka)
-
SpringCloud之服务注册与发现Spring Cloud Eureka实例代码
-
ASP.NET Core依赖注入系列教程之服务的注册与提供
-
springcloud使用之服务的注册发现与消费
-
基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现
-
Eureka(服务注册与发现)简单入门
-
SpringCloud-微服务的注册与发现Eureka
-
SpringCloud之Eureka:服务发布与调用例子
-
SpringCloud微服务实战:一、Eureka注册中心服务端