zoukankan      html  css  js  c++  java
  • spring cloud 入门系列三:使用Eureka 搭建高可用服务注册中心

    在上一篇中分享了如何使用Eureka 进行服务治理,里面搭建的服务注册中心是单体的,

    但是在实际的应用中,分布式系统为了防止单体服务宕机带来严重后果,一般都会采用服务器集群的形式,服务注册中心也是一样,需要多台服务一起工作,组成高可用的服务注册中心。这样,如果有其中一台宕机,系统也能正常运行。

    那么如何来构建高可用的服务注册中心呢?

    由于eureka注册中心既可以作为服务端(服务注册中心),也可以作为客户端(到别的注册中心注册自己),

    我们可以通过在机器上部署peer1和peer2两个服务,两个服务相互注册。

    一、代码实现

      还是使用上篇文章中的eureka服务例子,在此基础上我们进行修改:

    1. 新增/eureka/src/main/resources/application-peer1.properties
      server.port=1111
      
      spring.application.name=eureka-service
      #设定主机名为peer1
      eureka.instance.hostname=peer1
      
      #eureka.client.register-with-eureka=false
      #eureka.client.fetch-registry=false
      #设定eureka的serviceUrl为peer2
      eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka
    2. 新增/eureka/src/main/resources/application-peer2.properties
      server.port=1112
      
      spring.application.name=eureka-service
      eureka.instance.hostname=peer2
      #eureka.client.register-with-eureka=false
      #eureka.client.fetch-registry=false
      #设定eureka的serviceUrl为peer1
      eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka

      由于需要peer1和peer2相互注册,因此第1和第2步中,eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false这两个配置就不能要了,需要注释掉或删掉。

    3. 设定host,在C:WindowsSystem32driversetc目录下的hosts文件中添加
      127.0.0.1 peer1
      127.0.0.1 peer2

      以将peer1和peer2进行解析。

    4. 配置两个启动服务
      1. )
      2. )  
    5. 启动eureka1和eureka2
    6. 页面访问http://localhost:1111/

      我们会发现,在DS Replicas(分片)中会有peer2;   在服务instance中会有2个,一个是1111,一个是1112;   在registered-replicas(注册分片)和available-replicas(可用分片)中出现了peer2:1112。  同样道理,我们访问http://localhost:1112/也能看到相似效果。 如果将peer2停掉,那么在访问http://localhost:1111/的时候就会发现peer2已经跑到unavailable-replicas(不可用分片)中,具体截图略。

    二、调试中遇到的问题

    我在调试以上内容的时候遇到一个问题,就是在peer1和peer2一直不能彼此注册成功,页面表现就是服务instance为空并且available-replicas为空,对应的服务在unavailable-replicas中。后来经过多次实现和分析,终于发现,原来是在我的application.properties文件中还保留着下面两个配置,服务在启动的时候是会读取到这个配置的,

    虽然这两个配置默认是true,但是却被application.properties覆盖了,这个时候讲这两个配置注释掉就好了。

    如果在application-{profiles}.properties中再配置一遍就又可以覆盖application.properties里面的配置。

    代码读取顺序是这样的:

    先读取默认配置-->然后读取application.properties-->读取application-{profiles}.properties。

  • 相关阅读:
    使用ForEach循环控制器对返回参数进行多次调用
    html基础
    Eclipse使用github并开启命令行
    vim
    使用Jsoup爬取网站图片
    YUM
    javaagent项目中使用
    Linux基础三---打包压缩&vim&系统的初始化和服务
    linux 基础二---用户群租权限
    Linux 基础一---操作系统&常用命令
  • 原文地址:https://www.cnblogs.com/sam-uncle/p/8962170.html
Copyright © 2011-2022 走看看