SpringCloud微服務-服務發現Eureka使用篇(含gradle項目配置使用)

簡介

Spring Cloud 是基於springboot的一系列工具框架的集合體,提供了一套完整的微服務解決方案,它提供了微服務開發所需的服務發現註冊(eureka)、負載均衡(Ribbon)、熔斷器(Hystrix)、斷路器、智能路由(Zuul、微代理、控制總線、全局鎖、決策競選、分佈式會話集羣狀態管理等組件

梳理springCloud微服務這部分的內容,個人想通過springCloud微服務的整理,加深對springcloud的認知和理解

Eureka服務註冊和服務發現

既然Eureka是服務註冊和服務發現的組件,那麼我們先通過一張圖整體來了解下eureka的整體流程

其中的調用關係 :

首先服務提供者在啓動時,向註冊中心註冊自己提供的服務

接着服務消費者在啓動時,向註冊中心訂閱自己所需要的服務

然後註冊中心返回服務提供者地址給消費者

最後服務消費者從提供者地址中調用消費者

下面我們就上手擼代碼,來 理解這個調用流程關係

準備工作

之前總是玩maven這次換gradle嚐嚐鮮,基礎配置,然後通過一個小例子使用eureka:

  • 搭建服務註冊中心
  • 註冊服務提供者
  • 服務發現和消費

這裏先羅列我們完整的項目目錄結構

接下來將我們項目配置的gradle配置以及註釋如下,

group 'springlib'
version = '0.0.1-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8

buildscript {
    ext {
        //統一規定springboot的版本
        springBootVersion = '2.0.2.RELEASE'
        //統一規定springcloud的版本
        springCloudVersion = 'Finchley.M8'
    }
    repositories {
      	//設置鏡像倉庫
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://repo.spring.io/milestone'}
    }

    dependencies {//用來打包
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
allprojects {
    repositories {
      //配置全局鏡像倉庫
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://repo.spring.io/milestone'}
    }
    //配置全局指定編碼格式
    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }
}

//設定當前模塊項目中的配置
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    //spring boot 插件
    apply plugin: 'org.springframework.boot'
    //A Gradle plugin that provides Maven-like dependency management functionality
    apply plugin: 'io.spring.dependency-management'
    dependencies {
        compile ('org.springframework.boot:spring-boot-starter-web')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    dependencyManagement {
        imports {
            //spring bom helps us to declare dependencies without specifying version numbers.
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
    jar {
        manifest.attributes provider: 'gradle'
    }
}

到這裏我們目標的項目的基礎構建就結束了

服務註冊中心

  • 1.創建一個java的gradle的module,我這裏起名爲cloudlib-eureka-server

    在這裏插入圖片描述

  • 2.在module內的build.gradle配置:

    dependencies {
        compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    }
    

這個時候我們的EurekaServer的環境就配置結束

  • 3.創建啓動類

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    /**
     * 這個註解是聲名Eureka的入口註解,後面我們會詳細的分析eureka的原理
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class SpringlibApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringlibApplication.class, args);
    	}
    
    }
    
  • 4.配置Eureka的相關信息,即配置application.properties,當然都玩springboot了,肯定得配置高大上的application.yml

    #聲名服務端口號
    server:
      port: 9899
    #設置服務名稱
    eureka:
      instance:
        hostname: localhost
      client:
    		#是否在註冊中心註冊自己
        register-with-eureka: false
        #是否從 eureka 獲取註冊信息
        fetch-registry: false
        #配置註冊中心的url (注意:地址最後面的 /eureka/ 這個是固定值)服務註冊也就依賴這個url,後續我們會用到
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

到這裏我們server的配置就結束了,接下來我們啓動服務訪問看看,地址就是設置的服務名稱和端口號,這裏即是:http://localhost:9899/

當訪問看到Eureka大大的logo時,表示我們已經啓動成功,如圖:

在這裏插入圖片描述

使用 Eureka 進行服務註冊和發現

  • 與服務註冊中心一致,創建一個java的gradle的module,筆者這裏起名爲cloudlib-eureka-client

  • 在module的build.gradle中配置

    dependencies {
        compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    }
    
  • 創建啓動類

    @EnableDiscoveryClient
    @SpringBootApplication
    public class SpringEurekaClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringEurekaClientApplication.class, args);
        }
    }
    
  • 編輯application.yml,編輯使用

    spring:
      application:
        name: cloudlib-eureka-client
    server:
      port: 8989
    eureka:
      client:
        service-url:
              defaultZone: http://localhost:9899/eureka
        eureka-server-port: 9899
      instance:
        prefer-ip-address: true
        appname: localhost
    
  • 這裏客戶端的配置就結束了,這時我們打開剛纔的註冊中心
    在這裏插入圖片描述

    這裏就展示着我們向註冊中心註冊的客戶端信息

    到這裏可能有人看到在我們的註冊中心上有個紅色類似警告的錯誤

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

    這樣的信息

    這裏的意思是Eureka進入保護模式,暫時不會註銷服務註冊表中的服務
    

梳理

  • 通過spring-cloud-starter-netflix-eureka-server和@EnableEurekaServer實現服務註冊中心
  • 通過spring-cloud-starter-netflix-eureka-client和@EnableDiscoveryClient使用並註冊到服務註冊中心
  • 通過spring-cloud-starter-netflix-eureka-server和@EnableDiscoveryClient使用註冊中心並發現服務

下一篇我們從源碼來分析eureka的流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章