了解eureka
在了解eureka之前我们需要先了解下什么是微服务。在大型系统架构中,会拆分多个子系统,这些子系统都有两个功能,一个是提供接口,一个是调用接口,而在微服务架构中,我们叫这样的子系统为“微服务”。
在一个大型的微服务系统架构中可能会存在着成百上千个微服务,而这些微服务都有着自己的服务器地址,不同类型的微服务提供着不同的功能,按照常规的做法我们要调用哪个系统我们就会在该服务的配置信息中配置需要调用的服务信息。三两台服务的情况下我们还能管理配置起来,当我们碰到动不动就成百上千个服务的大型微服务架构时,这就不是我们能简简单单配置起来服务了。这时我们就需要提供一个处理中心对这么多的微服务信息进行管理,主要管理服务的服务名称、地址、服务状态等信息。
说到这里,我们应该清楚在一个微服务架构中我们需要一个处理中心来管理这么多服务。而在springcloud体系中就提供了eureka来给我们做注册发现。
如何使用eureka
在使用eureka之前,我们应该先了解下eureka的系统结构。在eureka中提供了server端和client端。server端就是我们所说的处理中心。而client就是添加到我们的微服务中,通过client端提供的程序来向我们的server端发送当前服务的信息以及下载其他的服务信息。具体通讯方式参照下图:
简单的了解了eureka的通讯,那么我们来简单实现一个上图通讯的示例程序。
通过eureka的控台显示可以看出我们启动了三个client以及两个server,由此可以看出我们成功的配置了server端和client端,那么我们现在来看下server端及client的配置。
server端配置
spring.profiles.active=dev
# eureka的服务名称
eureka.instance.appname=eureka-server
# 虚拟主机名,不配置的时候将根据操作系统的主机名来获取
eureka.instance.virtual-host-name=eureka-server
# 安全虚拟主机名,但是启用安全端口才会用
eureka.instance.secure-virtual-host-name=eureka-server
# 本地主机名
eureka.instance.hostname=eureka-server
# eureka地址
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${eureka.instance.hostname}:${server.port}
# 禁用eureka内部注册
eureka.client.register-with-eureka=true
# 禁止检索服务
eureka.client.fetch-registry=false
# eureka节点定时续约时间
eureka.instance.lease-renewal-interval-in-seconds=15
# eureka节点剔除时间
eureka.instance.lease-expiration-duration-in-seconds=45
# 服务端口
server.port=18080
# eureka服务地址
eureka.client.serviceUrl.defaultZone=http://localhost:18080/eureka,http://localhost:18081/eureka
client端配置
spring.profiles.active=dev
# eureka的服务名称
eureka.instance.appname=eureka-client
# 虚拟主机名,不配置的时候将根据操作系统的主机名来获取
eureka.instance.virtual-host-name=eureka-client
# 安全虚拟主机名,但是启用安全端口才会用
eureka.instance.secure-virtual-host-name=eureka-client
# 本地主机名
eureka.instance.hostname=eureka-client
# eureka地址
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${eureka.instance.hostname}:${server.port}
# 将自身的主机IP曝露给注册中心
eureka.instance.prefer-ip-address=true
# 是否注册自身到eureka服务器
eureka.client.register-with-eureka=true
# 注册服务中心互相发现机制启动
spring.cloud.config.discovery.enabled=true
# 从注册中心获取注册信息的时间间隔
eureka.client.registry-fetch-interval-seconds=5
eureka.client.eureka-server-connect-timeout-seconds=15
eureka.client.eureka-server-read-timeout-seconds=10
# 服务端口
server.port=18090
# eureka注册地址
eureka.client.serviceUrl.defaultZone=http://localhost:18080/eureka,http://localhost:18081/eureka
eureka的通讯
首先eureka在启动的时候会从eureka.client.serviceUrl.defaultZone属性中获取注册的url,eureka的集群就是通过该注册地址来实现集群。从下图eureka的启动日志可以看出我们有两个注册路径,分别为http://localhost:18080/eureka,http://localhost:18081/eureka就是我们配置文件中配置的路径
在eureka的服务日志中可以看到服务器定时的向注册地址发送服务器状态。