利用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
秒)。java

 

1、建立一個父工程

一、父工程主要用來管理子模塊的jar包依賴

pom文件以下:mysql

<?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>

 

 

2、建立一個子模塊做爲第一個eureka服務端

一、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>

 

二、配置文件

#內置的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之間相互註冊,構建集羣,當某一個服務端癱瘓,另一個還能用

 

 

 

三、主啓動類

 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 }

 

 

 

 

 

 3、建立一個子模塊做爲第二個euraka服務端,構建集羣

一、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>

 

二、配置文件

#內置的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服務端相互註冊

 

 

 

 

三、主啓動類

 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 }

 

 

 4、建立兩個euraka服務端遇到的問題

因爲是在同一臺電腦上,所以主機ip相同,爲了更好的顯示效果,上面將主機ip 和域名映射web

步驟1:找到C:\Windows\System32\drivers\etc下的hosts文件算法

步驟2:將主機ip和域名進行映射spring

 

 

 

此時咱們就能夠用映射的域名來代替主機ip了,能夠更好的演示效果sql

 

5、建立一個子模塊做爲euraka客戶端

一、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>

 

 

 

 

 

二、配置文件

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 #註冊中心訪問地址

 

 

 

 

 

三、主啓動類

 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 }

 

 

 

6、測試

一、訪問第一個eureka服務端

 

 

 二、訪問第二個服務端

相關文章
相關標籤/搜索