• 注册中心(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: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实例

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

  • 相关阅读:
    Python Django 编写一个简易的后台管理工具2-创建项目
    leetcode-解题记录 771. 宝石与石头
    leetcode-解题记录 1108. IP 地址无效化
    Python Django 编写一个简易的后台管理工具1-安装环境
    备忘录
    Pollard_rho 因数分解
    ProgrammingContestChallengeBook
    HDU ACM-Steps
    ARCH-LINUX 折(安)腾(装)记
    各种Python小玩意收集
  • 原文地址:https://www.cnblogs.com/javazl/p/12574474.html
Copyright © 2020-2023  润新知