注册中心(Eureka)

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:\Windows\System32\drivers\etc\hosts,在这个配置文件的末尾加上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实例

 

 

 至此我们就可以看到两个人服务之间相互注册,互相同步对方的数据。

 

posted @ 2020-03-26 17:09  繁华乱世  阅读(6041)  评论(1编辑  收藏  举报