什么是Eureka,为什么需要Eureka
eureka在Spring Cloud系列的微服务框架中是一个服务发现组件的角色,通俗来说就是一个消息贩子。在微服务框架中,很多功能被拆成了一个个的服务,所谓服务,可以认为就是项目。比如用户管理,就可以做一个用户服务,也就是这个项目,只处理了用户相关的功能。那么原先一个单体架构的项目,就可以拆分成一个个的微服务,这个数量可能会很多。而且,这些微服务可能会部署到不同的服务器上面。那么当用户请求过来的时候,如何来查找到他所需要的微服务。
这时候,一个角色出现了,那就是服务发现组件。你需要什么,你直接跟服务组件说,他会告诉你怎么访问这个微服务。比如,你对服务发现组件说,我需要登录,那好,他就把登录对应的微服务的访问方式给你。然后,你拿着这个访问方式,就自己去找登录的微服务了。这不就是各小说中的百事通嘛。
那么问题来了,eureka为什么会知道各微服务的访问方式呢?
原来,各微服务如果想要把自己的联系方式告诉eureka(这就是注册),那么是需要作为一个eureka的客户端(eureka-client)。然后,在微服务启动的时候,就会告诉服务发现组件(eureka-server),我叫啥名字,怎么联系我。到时候,有人来拿着我的名字来找我,你就告诉它我的联系方式。那这样子,服务发现组件就知道了微服务的联系方式。
这时候,服务发现组件(eureka-server)对微服务说,我怎么确保你的联系方式是有用的啊,我可不能坑了来我这里问消息的人。微服务就说了,那我们保持联系吧,我每隔一段时间就联系一下你,那你就知道我的联系方式是有用的啦。(健康检查)
如何构建一个单体的服务发现组件
- 在pom.xml上添加eureka服务器的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
给EurekaApplication添加注解@EnableEurekaServer
package com.wangguitang.freedom.study.spring.cloud.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
在配置文件application.yml中添加配置
server: port: eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动Eureka服务器
- 右键类EurekaApplication,选中Run As–>Spring Boot App
进一步思考
用单体方式部署服务发现组件好不好?当然不好,如果到时候服务发现组件挂了,那么所有的微服务岂不是都不能访问了。所以我们不能把鸡蛋放到一个篮子里,我们要多找几个服务发现组件,如果一个服务发现组件挂了,那么我们还可以找其他的服务发现组件,这就是集群。下一步,我们就来学习如何实现服务发现组件的集群。
最后献上Spring Cloud的架构图