利用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:\Windows\System32\drivers\etc下的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、访问第二个服务端

 

 

 

 

posted @ 2019-11-08 00:22  我好难啊upup  阅读(876)  评论(0编辑  收藏  举报