服务治理可以说是微服务架构中最为核心和基础的模块,它主要是用来实现各个微服务实例的自动化注册与发现。
如下,创建一个简单的eureka server步骤。
首先,创建一个基础的springboot工程,在pom文件中引入:
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。
在默认配置下,,该服务注册中心也会将自己作为客户端来尝试注册自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties文件中添加如下配置:
完成以上配置后,启动应用并访问http://localhost:8080,可以看到eureka注册信息面板。
再创建一个eureka client。
在springboot应用基础上引入以下pom依赖:
在主类中添加@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现,此处也可以用@EnableEurekaClient,区别是@EnableEurekaClient只能使用Eureka作为注册中心。
配置文件中配置对应的注册中心地址:
最简单的一个服务端跟客户端就完成了。
高可用注册中心
Eureka Server的高可用实际上就是将自己作为服务向其他服务中心注册自己,这样就形成了一组互相注册的服务注册中心,以实现服务清单的互相同步。
在设置了多节点的服务注册中心后,服务提供客户端需注册到eureka server集群中。服务提供者启动了两个实例,分别注册到两个注册中心上,(两个消费者客户端也分别指向一个注册中心)。
这里的两个服务提供者分别注册到了两个不同的服务注册中心上,也就是说,它们的信息分别被两个服务注册中心维护。此时,由于服务注册中心之间因互相注册为服务,当服务提供者发送注册请求到一个服务注册中间时,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。通过服务同步,两个服务提供者的服务信息就可以通过这两台服务注册中心中的任意一台获取到。
服务续约
在注册完服务之后,服务提供者会维护一个心跳用来持续告诉eureka server,防止被剔除出服务列表,这就是服务续约。默认的调用续约任务时间为30秒,定义服务时效的时间为90秒。
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
服务调用
启动服务消费者后,会发送rest请求给服务注册中心,来获取上面注册的服务清单。为了性能考虑,eureka server会维护一份只读的服务清单来返回给客户端,同时该缓存清单默认是隔30秒更新一次。获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。