您的位置:澳门402永利com > 编程应用 > eureka服务注册中心

eureka服务注册中心

发布时间:2019-09-23 20:45编辑:编程应用浏览(85)

    在bili看完spring cloud eureka高可用注册中心的视频以后总结:

    前言

    随着微服务架构的逐渐流行,现在很多互联网公司在两三年前架构都已经转到微服务架构了,互联网架构也经历了从传统ESB总线架构-》SOA-》微服务架构的演进过程,我待过的几家公司基本也都跟着潮流经历了这样的一个过程。除了互联网公司,之前待过的国有银行架构最近两年也都在转到微服务架构,有些传统银行架构师甚至比较“激进”的直接从ESB总线架构转到微服务,可见除了互联网公司传统行业也都在架构转型,微服务框架目前国内用的比较多的就是阿里的dubbo和今天要介绍的springcloud,springcloud在微服务方面的核心组件都来自于Netflix,在微服务架构中服务注册和发现是非常核心的一部分,今天主要讲解下如何搭建一个eureka的服务注册中心,并且实现HA高可用,最后还会把之前做的springboot的demo注册到eureka上,废话说了那么多,那么下面就开始上干货啦。

      正常开发中,肯定有一个功能聚集服务中心,将功能方法全部写入其中,也就是一个springboot项目。该服务配置如下:

    1. eureka服务注册中心(单机)

    首先使用ide工具新建一个maven工程,在pom.xml中引入我们工程需要的库,主要是springboot相关和eureka相关的库,具体的依赖库如下:

    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    引入工程后记得在pom.xml文件上点击右键,选择maven->reimport将涉及到的依赖库进行引入。
    包引入后创建Application入口类,除了和之前springboot工程不一样的工程就是要在APplication入口类上加上eurekaserver的注解@EnableEurekaSrver,让系统知道该类为Eureka的Server端。

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    
    }
    

    最后只要再增加Eureka的配置文件就可以了,这里我们依然使用yaml作为配置文件,具体语法可以google,还是很简单的,一句话就是用缩进来表示层级关系。

    spring:
      application:
        name: eureka-service-register
    server:
      port: 8761
    eureka:
      instance:
        hostname: localhost
    

    配置文件不解释也很好理解,上面的spring层级就相当于一般property文件的spring.application.name=eureka-service-register,表示该服务的名字;port看字面意思就知道是服务端口的意思;hostname表示对应的主机名,一般指向本机,这里配置为localhost。这样就完成了单机版的服务注册中心,是不是很简单,下面我们来启动下看看效果,启动工程后,在浏览器地址栏输入http://localhost:8761/。

    图片 1

    image

      1.首先新建一个springboot项目

    2.eureka HA多机高可用版

    eureka做多机互备非常简单,这里只需要修改下application.yml就可以了,将配置改为多profile配置,这样在实际运行部署的时候,同一套jar包只需要在启动的时候选择不同的profile就可以了。配置文件代码如下,这里只列出了最基本的配置项,eureka还有很多丰富的配置项,可以实现各种服务注册和发现方面的功能。

    spring:
      application:
        name: eureka-service-register
      profiles:
        active: node1
    ---
    spring:
      profiles: node1
    server:
      port: 8761
    
    eureka:
      instance:
        hostname: node1
      client:
    #    register-with-eureka: false
    #    fetch-registry: false
        serviceUrl:
        #将register1注册到register2上,实现HA
          defaultZone: http://node2:8762/eureka/
    ---
    spring:
      profiles: node2
    server:
      port: 8762
    
    eureka:
      instance:
        hostname: node2
      client:
    #    register-with-eureka: false
    #    fetch-registry: false
        serviceUrl:
          defaultZone: http://node1:8761/eureka/
    

    将eureka工程导出成jar包,直接在命令行运行

    java -jar eurekaserver.jar --spring.profiles.active=node1
    

    在其他机器运行

    java -jar eurekaserver.jar --spring.profiles.active=node2
    

    ndoe1和node2是在配置文件中配置的profile的名称,这里自己实验的时候为了方便可以将hosts文件修改主机名,来实现在一台机器上模拟多节点,找到本机的hosts文件,然后找到127.0.0.1那行,在后面加上127.0.0.1 node1 node2

    两个节点都启动后的效果如图,

    图片 2

    image

    可以看到instance里已经有了两个节点,eureka会实时查看两个节点的状态,如果一台宕机了,另一台会一直尝试,当问题节点恢复后会自动重连,并且将最新的服务注册信息同步到另一台节点,eureka更牛的地方在于这些服务信息除了在eureka的server端会保存,在服务使用方的client端同样会分布式保存全量的服务注册信息,当server端出现极端情况服务使用方连接不上所有的eureka server端节点的时候,服务使用方会使用本地保存的最新的服务提供列表找到服务提供方节点调用接口,只要服务提供方还能继续提供服务,就能保证整体服务的正常运转。

    图片 3

    3. 服务提供方的服务注册

    可以复用之前写的springboot restful api的例子,也可以直接在刚才的工程中新建一个module作为服务提供方,我在demo的代码中为了方便就直接新建了一个module作为服务提供方,其中主要有以下几点要修改下,其他的代码都和之前介绍的springboot的实例代码一样。
    1)在启动类增加@EnableEurekaClient注解,表示要注册到eureka服务器上,既然增加了eurekaClient的注解,那么肯定要设置哪个作为eureka的server端,下面来看下作为服务提供方的application.yml配置。

    spring:
      application:
        name: service-provider
    server:
      port: 8084
    eureka:
      instance:
        prefer-ip-address: true
      client:
        serviceUrl:
          defaultZone: http://node1:8761/eureka/,http://node2:8762/eureka/
    

    这里主要要说明的就是最后一行定义的eureka服务端地址,可以发现这两个地址就是刚才我们设置的eureka server集群的两个地址,

    图片 4

    image

    如果又3台就在后面再增加,理论上来说只写一台地址也是可以的,会自动同步其他几台的地址,但为了保险期间还是都配置上比较好,防止配置的这台出问题没有同步其他几台节点的信息。

      2.勾选上如下二个:

    小结

    本文介绍了eureka的server端和client端的配置,并且介绍了server端和client如何配置和使用服务注册集群来实现高可用,是不是很简单,赶紧自己动手来实现一个吧,本文讲到的所有代码都传到了git上,大家可以到git上下载代码。

    Git代码地址:https://github.com/feiweiwei/eureka-server-start

    图片 5

    图片 6

      3.在启动项这边引入一个配置:@EnableEurekaClient

    图片 7

      4.在application.properties中配置如下:

    图片 8

       5.在新建一个springboot项目里面搞二个注册中心

      图片 9

      6.相应的导入这个配置项:@EnableEurekaClient

    图片 10

      6.在将他的配置文件进行对应的修改,修改如下:

    图片 11

      7.下面尝试弄二个服务注册中心,通过这个项目实现,只不过需要开二次tomcat而已,模拟双服务中心:

    运行前先将运行进行配置:

    图片 12

    在启动时候,会报错,因为我们没有将8761这个服务中心启动,所以我们在将8761启动,在浏览器中输入localhost:8762:

    图片 13

    这样eureka的注册就完成了。

    而高可用指的是 在项目那边的配置文件里面写:

    eureka.client.service-url.defaultZone=http://localhost:8762/eureka,但是因为刚才注册的时候关联到了8761端口的,所以8761的也可以在注册中心看到。但是一般在配置文件那边都写上,因为万一http://localhost:8762/eureka挂掉,还可以有http://localhost:8761/eureka.
    

    第一次写,概念很模糊,有待总结。感谢收看土川之心。。。

    本文由澳门402永利com发布于编程应用,转载请注明出处:eureka服务注册中心

    关键词: