美文网首页
springcloud(一)服务注册与发现

springcloud(一)服务注册与发现

作者: 寻找大海的鱼 | 来源:发表于2018-11-09 11:46 被阅读0次

    一.Eureka Server

    1.建立项目


    1.png

    点击Next


    2.png
    点击Next
    3.png

    点击Next


    4.png
    点击Finish完成项目建立。
    在EurekaApplication主类里加上一句注解
    @EnableEurekaServer
    package com.wyh.eureka;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    }
    
    

    2.配置文件
    接下来修改配置文件,我们使用的是yml文件,将application.properties修改为application.yml文件,并添加如下配置内容:

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
        register-with-eureka: false       
      #server:
       # enable-self-preservation: false
    spring:
      application:
        name: eureka
    server:
      port: 8761
    

    3.启动服务
    然后启动服务,在浏览器URL里面输入localhost:8761


    5.png

    我们的注册中心便布置好了。

    二.Eureka Client的使用

    1.新建项目


    1.png

    点击Next


    2.png
    点击Next
    3.png

    点击Next


    4.png
    点击Finish
    在ClientApplication主类里加入注解
    @EnableDiscoveryClient
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(ClientApplication.class, args);
        }
    }
    

    2.配置文件
    接下来修改配置文件,我们使用的是yml文件,将application.properties修改为application.yml文件,并添加如下配置内容:

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    spring:
      application:
        name: client
    

    在pom.xml文件加入以下依赖,不然可能会无法启动服务

    <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    3.启动client
    启动client项目,然后刷新页面


    5.png

    然后我们可以看到名叫client的应用连上了,然后我们点击status下面的ip 192.168.1.111:client,我们可以看到下面的另一个ip页面


    6.png
    但是有时候我们希望看到的不是ip,我们可以在application.yml里面加入以下配置代码(在eureka下面加入instance:
    hostname:clientName)
    就可以实现自定义了
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
      instance:
        hostname: clientName
    spring:
      application:
        name: client
    

    我们重启client项目,再点击status下面的ip 192.168.1.111:client


    7.png

    我们可以看到已经自定义链接了

    三.Eureka的高可用

    高可用.png

    如上图,为了实现Eureka高可用的,可以将两个Eureka进行互相注册。操作步骤如下:
    ①.在idea右上角选Edit Configurations...如下图


    12.png

    进入下列页面


    14.png
    ②点击左上角的如下图标,对EurekaApplication进行copy
    13.png
    如下图
    15.png

    ③为了区分,将EurekaApplication改为EurekaApplication1,将EurekaApplication(1)改为EurekaApplication2,并分别设置端口,
    在EurekaApplication1的VM options里填入 -Dserver.port=8761
    在EurekaApplication2的VM options里填入 -Dserver.port=8762,
    然后点击Apply确定


    E1.png
    E2.png
    ④修改EurekaApplication1的application.yml文件里面的defaultZone将其注册到EurekaApplication2上,并启动服务。
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8762/eureka/
        register-with-eureka: false
      server:
        enable-self-preservation: false
    spring:
      application:
        name: eureka
    #server:
     # port: 8761
    management:
      server:
        servlet:
          context-path: /
    

    修改EurekaApplication2的application.yml文件里面的defaultZone将其注册到EurekaApplication1上,并启动服务。

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
        register-with-eureka: false
      server:
        enable-self-preservation: false
    spring:
      application:
        name: eureka
    #server:
     # port: 8761
    management:
      server:
        servlet:
          context-path: /
    

    ⑤测试页面
    分别在URL输入localhost:8761和localhost:8762


    localhost8761.png
    localhost8762.png

    可以观察到,虽然客户端client是注册到Eureka1上,但是Eureka1和Eureka2相互注册了,所以我们也能在Eureka2上看到client。
    此时,如果我们把Eureka1服务停掉,但是在Eureka2里面依然可以看到client。但是如果我们关掉client服务,并重启client程序,会发现报错了,这是由于client是注册到Eureka1上的,而Eureka1已经停掉了。
    此时由于心跳机制的存在Eureka2上可能还看到client服务,我们将Eureka2重启就没有了。


    17.png
    我们希望在Eureka1挂了以后,client也可以注册上去,怎么做呢?只要client每次向两个Eureka注册上去就好了
    18.png
    我们只要修改client的application.yml,配置两个就行
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
     # instance:
      #  hostname: clientName
    spring:
      application:
        name: client
    

    那么如何实现3个Eureka呢?如下图,将三个Eureka进行两两注册,而client就直接配置三个Eureka就好了


    19.png

    操作步骤如下:
    1)修改Eureka1的application.yml,并重启服务

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/
        register-with-eureka: false
      server:
        enable-self-preservation: false
    spring:
      application:
        name: eureka
    #server:
     # port: 8761
    management:
      server:
        servlet:
          context-path: /
    

    2)修改Eureka2的application.yml,并重启服务

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/,http://localhost:8763/eureka/
        register-with-eureka: false
      server:
        enable-self-preservation: false
    spring:
      application:
        name: eureka
    #server:
     # port: 8761
    management:
      server:
        servlet:
          context-path: /
    

    3)按照之前的方式,我们新建Eureka3,并修改application.yml,启动服务

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
        register-with-eureka: false
      server:
        enable-self-preservation: false
    spring:
      application:
        name: eureka
    #server:
     # port: 8761
    management:
      server:
        servlet:
          context-path: /
    

    4)修改client的application.yml文件,重启服务

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
     # instance:
      #  hostname: clientName
    spring:
      application:
        name: client
    

    从下面图中可以看到每个Eureka里我们搭建的集群其它的地址情况。


    20.png 21.png 22.png

    四.Eureka总结

    1)@EnableEurekaServer和@EnableEurekaClient分别启动Server和Client
    EurekaServer会提供服务注册的功能,各个服务节点启动后,会在EurekaServer中进行注册,这样EurekaServer就有了所有节点的信息,然后我们也看到Eureka界面看到所有注册服务的信息
    2)Eureka有心跳检测、健康检查、负载均衡等功能
    心跳检测:如果在系统的运行时间,如果有谁挂了,没有在规定的时间发送心跳信号,就会被Eureka西东剔除掉
    如果某个服务增加,只要增加服务的实例即可。
    3)Eureka的高可用,生产上建议至少两台以上,保证服务的稳定运行。
    4)分布式系统中,服务注册中心是最重要的基础部分。

    相关文章

      网友评论

          本文标题:springcloud(一)服务注册与发现

          本文链接:https://www.haomeiwen.com/subject/liwixqtx.html