这篇我们了解下服务注册中心Eureka,类似框架还有Zookeeper、Nacos,各有各的特点,在springcloud中推荐使用eureka,整合起来也是非常简单。
我们看看eureka的一般组成:
服务端:服务注册中心,也就是总平台,提供服务的注册和发现
客户端:具体的子模块,既可以是消费者,也可以是提供者
我们看看大致流程:首先必须有一个服务端,各子模块在启动后都要向服务端平台注册自己,也就是告诉服务注册中心我来了,我家在xxx,提供xxx服务,同时会找服务注册中心要一份服务列表。这个时候服务注册中心就会把此条注册信息记录起来,同时告诉子模块你必须定期向我报告家里是否有人(心跳检测),如果我没收到报告,我就把你的注册信息剔除。
这里要注意,eureka服务端自身也可以当做服务提供者注册在列表中,这个可用做服务注册中心的高可用
下面我们按照步骤部署一个服务端(Eureka Server)
<!--增加eureka-server的依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
然后我们增加一个yml配置
server:
port: 8762
spring:
application:
name: springcloud-eureka
eureka:
client:
fetch-registry: false #否获取eureka服务器注册表上的注册信息,默认为true
register-with-eureka: false #是否将自己作为服务注册,默认为true
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #和服务注册中心的连接地址,不用奇怪本身是服务端为什么还要配置这个地址,做高可用的时候就发挥作用了,可以以逗号分隔填上其它服务中心地址。
server:
enable-self-preservation: false #服务端是否开启自我保护模式。这个自我保护模式可以细了解一下
eviction-interval-timer-in-ms: 30000 #清理无效节点的时间间隔,这里为3s,这里是个定时器,也就是定时检测服务状态
response-cache-update-interval-ms: 3000 #eureka server刷新readCacheMap的时间,eureka中两个缓存队列中的一个
responseCacheAutoExpirationInSeconds: 180 #缓存过期时间
peer-eureka-nodes-update-interval-ms: 30 #eureka节点间间隔多长时间更新一次数据。默认10分钟。
注意下我们在启动类中加上 @EnableEurekaServer注解,声明这个是eureka的服务端
启动后我们访问 http://localhost:8761/ 可以看到后台效果,当前是没有可用服务。
一个简单的eureka服务端已经跑起来的,接下来我们继续部署一个客户端(Eureka Client)
添加客户端的依赖
<!-- 配置中心-客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
增加配置文件
eureka:
instance:
lease-renewal-interval-in-seconds: 5 #该实例给服务中心发送心跳的间隔时间
prefer-ip-address: true #是否优先使用IP注册,也就是服务注册中心显示的是主机名还是ip
client:
serviceUrl:
defaultZone: http://localhost:8762/eureka/ #服务注册中心连接地址
registry-fetch-interval-seconds: 5 #从注册中心获取注册信息列表的时间间隔(s),默认为30秒
依然是在启动类中加上 @EnableEurekaClient注解,声明这个是eureka的客户端
我们可以看到在注册成功后
服务端日志
c.n.e.registry.AbstractInstanceRegistry : Registered instance SPRINGCLOUD-EUREKA-CLIENT/DESKTOP-D1E31L8:springcloud-eureka-client:8762 with status UP (replication=false)
客户端日志
com.netflix.discovery.DiscoveryClient - DiscoveryClient_SPRINGCLOUD-EUREKA-CLIENT/DESKTOP-D1E31L8:springcloud-eureka-client:8762 - registration status: 204
204也就是说服务注册完成
我们看看服务注册中心的后台效果
已经可以在里面看到我们的客户端信息了,大功告成
这是基本的eureka的服务端和客户端的搭建,更高级的使用,请参考官方文档。
小贴士
服务启动后客户端需要不停的向服务端发送心跳信息,每次发送完都会输出一条日志,如下
com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver - Resolving eureka endpoints via configuration
重复输出是很烦人的,对于判断服务的状态我们可以通过服务注册中心后台查询,这里为了避免输出我们可以在配置文件中加上以下配置
客户端加上
logging:
level:
com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver: WARN
服务端加上
logging:
level:
com.netflix: warn