• Springcloud 学习笔记02-Spring Cloud Eureka 服务注册与发现


    Spring Cloud Eureka是Spring Cloud Netflix 子项目的核心组件之一,主要用于微服务架构中的服务治理。 本文将对搭建Eureka注册中心,搭建Eureka客户端,搭建Eureka集群及给Eureka注册中心添加登录认证进行介绍。

    在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。

    创建统一的父工程:hztest,用来管理依赖及其版本,注意是创建project,而不是module

     

     pom.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.hztest.parent</groupId>
        <artifactId>hztest</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <name>hztest</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
            <mybatis.starter.version>1.3.2</mybatis.starter.version>
            <mapper.starter.version>2.0.2</mapper.starter.version>
            <druid.starter.version>1.1.9</druid.starter.version>
            <mysql.version>5.1.32</mysql.version>
            <pageHelper.starter.version>1.2.3</pageHelper.starter.version>
            <leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version>
            <fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- springCloud -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- mybatis启动器 -->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>${mybatis.starter.version}</version>
                </dependency>
                <!-- 通用Mapper启动器 -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${mapper.starter.version}</version>
                </dependency>
                <!-- 分页助手启动器 -->
                <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper-spring-boot-starter</artifactId>
                    <version>${pageHelper.starter.version}</version>
                </dependency>
                <!-- mysql驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
                <!--FastDFS客户端-->
                <dependency>
                    <groupId>com.github.tobato</groupId>
                    <artifactId>fastdfs-client</artifactId>
                    <version>${fastDFS.client.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    可以发现,我们在父工程中引入了SpringCloud等,很多以后需要用到的依赖,以后创建的子工程就不需要自己引入了。

    最后,删除src目录。

    注意:一定要修改maven的仓库配置路径

    01 搭建Eureka注册中心服务端

    以创建并运行Eureka注册中心来看看在IDEA中创建并运行SpringCloud应用的正确姿势。

    方法一:推荐参考链接:https://www.cnblogs.com/luckyplj/p/15020846.html的方式创建Eureka注册中心。

    方法二:创建一个eureka-server模块,并使用Spring Initializer初始化一个SpringBoot项目,http://www.macrozheng.com/#/cloud/eureka.md

    (1)在启动类上添加@EnableEurekaServer注解来启用Euerka注册中心功能

    package com.hztest;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class HztestRegisterApplication {
        public static void main(String[] args) {
            SpringApplication.run(HztestRegisterApplication.class,args);
        }
    }

    (2)在配置文件application.yml中添加Eureka注册中心的配置

    server:
      port: 10086  #指定运行端口
    spring:
      application:
        name: hztest-register #指定服务名称
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:${server.port}/eureka
        register-with-eureka: false # 不把自己注册到eureka服务列表
        fetch-registry: false
      server:
        enable-self-preservation: false # 关闭自我保护
        eviction-interval-timer-in-ms: 5000 # 每隔5秒钟,进行一次服务列表的清理

    (3)使用IDEA的Run Dashboard来运行SpringCloud应用

    此时服务已经创建完成,点击启动类的main方法就可以运行了。但是在微服务项目中我们会启动很多服务,为了便于管理,我们使用IDEA的Run Dashboard来启动。

    打开Run Dashboard的方法:

    如果Tool Windows的子选项里没有Run Dashboard,可以在工程目录下找.idea文件夹下的workspace.xml,在其中增加如下组件。

    <component name="RunDashboard">
        <option name="configurationTypes">
          <set>
            <option value="SpringBootApplicationConfigurationType" />
          </set>
        </option>
        <option name="ruleStates">
          <list>
            <RuleState>
              <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
            </RuleState>
            <RuleState>
              <option name="name" value="StatusDashboardGroupingRule" />
            </RuleState>
          </list>
        </option>
      </component>

    运行SpringCloud应用:

    运行完成后访问地址http://localhost:10086/可以看到Eureka注册中心的界面

    02 搭建Eureka客户端

    (1)新建一个eureka-client模块,并在pom.xml中添加如下依赖

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>

    (2)在启动类上添加@EnableDiscoveryClient注解表明是一个Eureka客户端

    package com.hztest;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class HztestRegisterClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(HztestRegisterClientApplication.class, args);
        }
    }

    (3)在配置文件application.yml中添加Eureka客户端的配置

    server:
      port: 8101 #运行端口号
    spring:
      application:
        name: eureka-client #服务名称
    eureka:
      client:
        register-with-eureka: true #注册到Eureka的注册中心
        fetch-registry: true #获取注册实例列表
        service-url:
          defaultZone: http://localhost:10086/eureka/ #配置注册中心地址

    (4)运行eureka-client

    (5)查看注册中心http://localhost:10086/发现Eureka客户端已经成功注册

    03 搭建Eureka注册中心集群

    由于所有服务都会注册到注册中心去,服务之间的调用都是通过从注册中心获取的服务列表来调用,注册中心一旦宕机,所有服务调用都会出现问题。所以我们需要多个注册中心组成集群来提供服务,下面将搭建一个双节点的注册中心集群。

    (1)给hztest-register的resources目录中添加配置文件application-replica1.yml配置第一个注册中心

    server:
      port: 8002
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: replica1
      client:
        serviceUrl:
          defaultZone: http://replica2:8003/eureka/ #注册到另一个Eureka注册中心
        fetch-registry: true
        register-with-eureka: true

    (2)给hztest-register的resources目录中添加配置文件application-replica2.yml配置第二个注册中心

    server:
      port: 8003
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: replica2
      client:
        serviceUrl:
          defaultZone: http://replica1:8002/eureka/ #注册到另一个Eureka注册中心
        fetch-registry: true
        register-with-eureka: true

    这里我们通过两个注册中心互相注册,搭建了注册中心的双节点集群,由于defaultZone使用了域名,所以还需在本机的host文件中配置一下。

    127.0.0.1 replica1
    127.0.0.1 replica2

    (3) 运行Eureka注册中心集群

    在IDEA中我们可以通过使用不同的配置文件来启动同一个SpringBoot应用

    从原启动配置中复制一个出来

    (4) 启动两个HztestRegister,访问其中一个注册中心http://replica1:8002/发现另一个已经成为其备份

    (5)修改Eureka-client,让其连接到集群

    修改eureka-client的配置文件application-replica.yml,让其同时注册到两个注册中心。

    server:
      port: 8101 #运行端口号
    spring:
      application:
        name: eureka-client #服务名称
    eureka:
      client:
        register-with-eureka: true #注册到Eureka的注册中心
        fetch-registry: true #获取注册实例列表
        service-url:
          defaultZone: http://replica1:8002/eureka/,http://replica2:8003/eureka/ #同时注册到两个注册中心

    重新启动后访问任意一个注册中心节点都可以看到eureka-client

     

    参考文献:http://www.macrozheng.com/#/cloud/eureka.md

  • 相关阅读:
    给Firefox添加京东网(360buy)购物搜索
    zt 『职场天地』 [职业经历]我在跨国公司10年的日子
    笔记 UMAI:一种标识媒体资产对象的方法
    笔记 基于流媒体交换网的流媒体网络文件系统(杨景2006)
    笔记软件试用2
    1月20日,奥巴马宣誓就职,CDN的决战战场
    steps2>myAction
    Spring AOP03
    Oracle内置函数02
    steps2>AbstractBaseAction
  • 原文地址:https://www.cnblogs.com/luckyplj/p/15093738.html
Copyright © 2020-2023  润新知