Eureka是Netflix开发的一个服务发现框架,它是基于REST的服务,主要用于定位在AWS(AmazonWebServices)域中运行的中间层服务,以实现负载平衡和中间层服务故障转移。SpringCloud将其集成到自己的子项目SpringCloudNetflix中,以实现SpringCloud的服务发现功能。
Eureka的服务发现包含两大组件:服务端发现组件(EurekaServer)和客户端发现组件(EurekaClient)。服务端发现组件也被称之为服务注册中心,主要提供了服务的注册功能,而客户端发现组件主要用于处理服务的注册与发现。Eureka的服务发现机制如图所示。
从上图中可以看出,当通过注释等将客户端服务嵌入程序代码中时,客户端发现组件将在注册表中注册其自己的服务,并定期发送心跳以更新服务(默认时间为30秒,如果连续3次(如果心跳无法发现服务,则Eureka将从服务注册表中删除服务节点)。同时,客户端发现组件还将从服务器查询当前注册的服务信息,并将其本地缓存。即使EurekaServer出现问题,客户端组件也可以通过缓存中的信息来调用服务节点的服务。将通过注册表的注册信息在“休息”模式下调用各种服务,并且可以直接通过服务名称进行调用。
Eureka的服务发现机制包含了3个角色:服务注册中心、服务提供者和服务消费者。
服务注册中心即EurekaServer,而服务提供者和服务消费者是EurekaClient。这里的服务提供者是指提供服务的应用,可以是SpringBoot应用,也可以是其他技术平台且遵循Eureka通信机制的应用,应用在运行时会自动地将自己提供的服务注册到EurekaServer以供其他应用发现。
服务消费者就是需要服务的应用,该服务在运行时会从服务注册中心获取服务列表,然后通过服务列表知道去何处调用其他服务。服务消费者会与服务注册中心保持心跳连接,一旦服务提供者的地址发生变更时,注册中心会通知服务消费者。
需要注意的是,Eureka服务提供者和服务消费者之间的角色是可以相互转换的,因为一个服务既可能是服务消费者,同时也可能是服务提供者。
推荐阅读:java架构师培训:java最佳测试框架JBehave的基本介绍
如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1160405674,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!