zoukankan      html  css  js  c++  java
  • 利用eureka构建一个简单的springCloud分布式集群

    前言:了解eureka的服务端和客户端

     Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目
    spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
    Eureka Server和Eureka Client。
         Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注
    册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点
    的信息可以在界面中直观的看到。
    ​     Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也
    有一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会
    向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有
    接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90
    秒)。

     

    一、创建一个父工程

    1、父工程主要用来管理子模块的jar包依赖

    pom文件如下:

    <?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.offcn</groupId>
        <artifactId>microservice_cloud_01</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <modules>
            <module>microservice_cloud_02_api</module>
            <module>microservice_cloud_03_provider_product_8001</module>
            <module>microservice_cloud_04_consumer_product_80</module>
            <module>microservice_cloud_06_eureka_6002</module>
            <module>microservice_cloud_06_eureka_6001</module>
        </modules>
    
        <!--父工程  手动指定pom-->
        <packaging>pom</packaging>
        <!---->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.7.RELEASE</version>
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!--jdk版本1.8-->
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <!--junit版本-->
            <junit.version>4.12</junit.version>
            <!--SpringCloud版本-->
            <spring-cloud.version>Finchley.SR2</spring-cloud.version>
        </properties>
    
    <!--父工程只做依赖管理,不做实际依赖-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <!--maven项目只能单继承,因此这里使用 import-->
                    <scope>import</scope>
                </dependency>
    
                <!--mybatis整合springboot-->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>1.3.2</version>
                </dependency>
                <!--druid-->
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.1.12</version>
                </dependency>
                <!--mysql驱动-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.13</version>
                </dependency>
                <!--junit测试-->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>

    二、创建一个子模块作为第一个eureka服务端

    1、pom文件

    <?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">
        <parent>
            <artifactId>microservice_cloud_01</artifactId>
            <groupId>com.offcn</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>microservice_cloud_06_eureka_6001</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    
    </project>

    2、配置文件

    #内置的tomcat服务启动监听端口号
    server:
      port: 6001
    
    #EurekaServer配置
    eureka:
      instance:
        hostname: eureka6001.com
      client:
        register-with-eureka: false #此EurekaServer不在注册到其他的注册中心
        fetch-registry: false       #不在从其他中心中心拉取服务器信息
        service-url:
          defaultZone: http://eureka6002.com:6002/eureka #注册中心访问地址,两个eureka之间相互注册,构建集群,当某一个服务端瘫痪,另外一个还能用

    3、主启动类

     1 package com.offcn.springcloud;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
     6 import org.springframework.context.annotation.Configuration;
     7 
     8 @SpringBootApplication
     9 @EnableEurekaServer
    10 public class EurekaServer_6001 {
    11 
    12     public static void main(String[] args) {
    13         SpringApplication.run(EurekaServer_6001.class,args);
    14     }
    15 }

     三、创建一个子模块作为第二个euraka服务端,构建集群

    1、pom依赖

    <?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">
        <parent>
            <artifactId>microservice_cloud_01</artifactId>
            <groupId>com.offcn</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>microservice_cloud_06_eureka_6002</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    
    </project>

    2、配置文件

    #内置的tomcat服务启动监听端口号
    server:
      port: 6002
    
    #EurekaServer配置
    eureka:
      instance:
        hostname: eureka6002.com
      client:
        register-with-eureka: false #此EurekaServer不在注册到其他的注册中心
        fetch-registry: false       #不在从其他中心中心拉取服务器信息
        service-url:
          defaultZone: http://eureka6001.com:6001/eureka #注册中心访问地址,两台euraka服务端相互注册

    3、主启动类

     1 package com.offcn.springcloud;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
     6 
     7 @SpringBootApplication
     8 @EnableEurekaServer
     9 public class EurekaServer_6002 {
    10     public static void main(String[] args) {
    11         SpringApplication.run(EurekaServer_6002.class,args);
    12     }
    13 }

     四、创建两个euraka服务端遇到的问题

    由于是在同一台电脑上,因此主机ip相同,为了更好的显示效果,上面将主机ip 和域名映射

    步骤1:找到C:WindowsSystem32driversetc下的hosts文件

    步骤2:将主机ip和域名进行映射

    此时我们就可以用映射的域名来代替主机ip了,可以更好的演示效果

    五、创建一个子模块作为euraka客户端

    1、pom依赖

    <?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">
    
        <parent>
            <artifactId>microservice_cloud_01</artifactId>
            <groupId>com.offcn</groupId>
            <version>1.0-SNAPSHOT</version>
    
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
        <artifactId>microservice_cloud_03_provider_product_8001</artifactId>
    
        <dependencies>
    
            <!--microservice_cloud_02_apixian-->
            <dependency>
                <groupId>com.offcn</groupId>
                <artifactId>microservice_cloud_02_api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!--web启动器-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--test-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
    
            <!--SpringBoot整合Mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
    
            <!--druid-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
    
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <!--eureka-client-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
        </dependencies>
    
    
    </project>

    2、配置文件

    server:
      port: 8001
    
    spring:
      application:
        name: microservice-product #这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springcloud?serverTimezone=UTC
        username: root
        password: ROOT
        dbcp2:
          min-idle: 5 #最小连接数
          initial-size: 5 #初始化连接数
          max-total: 20 #最大连接数
          max-wait-millis: 150 #等待连接获取的最大超时时间
    mybatis:
      config-location: classpath:mybatis/mybatis-config.xml
      type-aliases-package: com.offcn.springcloud.entities # 所有Entity别名类所在包,因私在mapper映射文件中,就不需要写全类名了,只用写类名就行
     #指定mapper映射文件的位置,当mapper映射文件和mapper接口不同包的情况下,配置这个就会生效
      mapper-locations: classpath:mybatis/mapper/**/*.xml
    
    eureka:
      client:
        register-with-eureka: true #此EurekaServer注册到其他的注册中心
        fetch-registry: true       #从其他中心中心拉取服务器信息
        service-url:
          defaultZone: http://eureka6002.com:6002/eureka,http:///eureka6001.com:6001/eureka #注册中心访问地址

    3、主启动类

     1 package com.offcn.springcloud;
     2 
     3 import org.mybatis.spring.annotation.MapperScan;
     4 import org.springframework.boot.SpringApplication;
     5 import org.springframework.boot.autoconfigure.SpringBootApplication;
     6 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
     7 
     8 @SpringBootApplication
     9 @MapperScan("com.offcn.springcloud.mapper")
    10 @EnableEurekaClient
    11 public class HelloApplication {
    12     public static void main(String[] args) {
    13         SpringApplication.run(HelloApplication.class,args);
    14     }
    15 
    16 }

    六、测试

    1、访问第一个eureka服务端

     2、访问第二个服务端

     

  • 相关阅读:
    浏览器之window对象--javascript
    CSS3盒子模型
    CSS3动画以及animation事件
    CSS3响应式布局
    原生JS实现tab切换--web前端开发
    html5表单与PHP交互
    UITableView 的坑
    多线程:Operation(二)
    多线程:Operation(一)
    GCD(Swift)
  • 原文地址:https://www.cnblogs.com/lqcswy/p/11817215.html
Copyright © 2011-2022 走看看