Eureka是Spring Cloud的注册中心,类似于Dubbo中的zookeeper,那么什么是注册中心呢?在了解注册中心之前我们先看一下单体应用。
传统的单体应用:
在单体应用中,所有的业务都集中在一个服务器中,当浏览器发起请求时,通过前端请求调用后端接口,后端接口调用相应的业务并在前端进行响应,整个的调用就是从请求到响应的一条龙服务。所以不存在服务之间的中转,也就不存在注册中心。
但是随着项目越做越大,传统的单体项目已经无法满足我们的需求(用户数量增加,业务功能增多,服务器压力变大。。。),所以我们需要用微服务思想,对项目进行拆分,拆分后的每个模块都会再一个服务器上独立的运行,虽然解决了一些单体项目所带来的的诸多瓶颈,但是又有一个新的问题产生,就是模块与模块之间的调用,一个模块的使用可能需要依赖很多模块,例如A调用B,那么就要在A中写上B的地址,也就意味着B的部署位置要稳定,不能变,如果B要进行集群化部署,那么A就需要修改,所以耦合度是非常高的。接下来就要引入注册中心,它的存在完美的解决了这种高耦合的诟病。
Eureka简介:
Eureka是由Netflix公司提供的,它是基于REST实现注册和发现的。曾经Eureka是Spring Cloud中非常重要的组件之一,但是官方对它已经对外停更了,至今有一年半时间了,但是目前并不影响我们使用它。
Eureka由两部分组成,服务端和客户端,服务端是注册中心,用来接收其他服务的注册,客户端是java客户端,用开注册,并实现负载均衡,其中客户端根据业务又划分两部分,服务提供者,和服务消费者。
Eureka的使用:
Eureka是由java开发的,因为Spring Boot对Eureka进行了封装,所以使用Spring Cloud 搭建Eureka是非常方便的,只需要引入依赖就可以了。
说一千道一万,还不如实战来的实在,接下来就看一下它的搭建步骤:
1.创建一个boot项目,并加入如下的依赖;
2.项目创建成功后,需要在启动类上加上一个注解(@EnableEurekaServer),标记它是一EurekaServer:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication //开启EurekaServer的功能 @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
3.在application.propeties加入配置:
#给服务取名 spring.application.name=eureka #服务端口号 server.port=1111 #默认情况下,eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,会有两个身份: #注册中心和普通服务 #eureka.client.register-with-eureka设置为false,表示当前项目不要注册到注册中心去 eureka.client.register-with-eureka=false #表示是否从eureka Server 上获取注册信息 eureka.client.fetch-registry=false
4.配置完成后就可以启动项目了。
浏览器输入localhost:1111,当看见这个页面,就证明已经配置成功了:
简单介绍下这个界面:
System Status,系统状态,例如启动时间等
DS Replicas :集群环境下的副本,也就是当前服务从哪里同步数据。
Instances currently registered with Eureka:当前注册上来的服务
General Info:系统的运行环境,如CPU等
下面还有一条信息,上面图片没有显示:
Instance Info:当前服务的基本信息,如IP地址,状态等等。
介绍的这个界面中有一个集群,那么它是做什么的?为什么要有它?
简单来说,集群的产生就是为了分散服务压力,因为我们是用了注册中心之后,所有的服务都要经过服务注册中心来进行信息交换,所以一旦注册中心出了问题,那么会影响到整个系统的稳定性。所以,在实际开发中,Eureka都是以集群的形式存在。
Eureka集群,实际上就是启动多个Eureka实例,多个实例之间相互注册,相互同步数据,共同组成一个 Eureka集群。
接下来我们看一下集群是如何 搭建的:
1.修改电脑的hosts文件,文件路径是C:WindowsSystem32driversetchosts,在这个配置文件的末尾加上127.0.0.1 eureka-a eureka-b
2.在上边搭建的Eureka上添加两个配置文件,分别是application-a .properties,application-b.properties
先看application-a .properties的配置
#给服务取名 spring.application.name=eureka #服务端口号 server.port=1111 #起一个别名 eureka.instance.hostname=eurekaA #默认情况下,eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,会有两个身份: #注册中心和普通服务 #eureka.client.register-with-eureka设置为true,表示当前项目要注册到注册中心去 eureka.client.register-with-eureka=true #表示是否从eureka Server 上获取注册信息 eureka.client.fetch-registry=true #将eurekaA注册到eurekaB上 eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka
再看application-b.properties的配置:
#给服务取名 spring.application.name=eureka #服务端口号 server.port=1112 #起一个别名 eureka.instance.hostname=eurekaB #默认情况下,eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,会有两个身份: #注册中心和普通服务 #eureka.client.register-with-eureka设置true,表示当前项目要注册到注册中心去 eureka.client.register-with-eureka=true #表示是否从eureka Server 上获取注册信息 eureka.client.fetch-registry=true #将eurekaB注册到eurekaA上 eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka
3.配置完成后对项目打成jar包,双击package
4,在命令行启动两个Eureka实例。
在Terminal中切换到刚打包后的目录下,执行下面的命令,一条执行完成后,重新打开一个Termina窗口,继续执行下一条命令
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b
5.命令执行完成后,浏览器访问两个Eureka实例
至此我们就可以看到两个人服务之间相互注册,互相同步对方的数据。