SpringCloud--1--服務治理Eureka

1、Eureka概述html

一、Eureka特色java

  • 只需經過簡單引入依賴和註解配置,就能讓SpringBoot構建的微服務應用輕鬆地與Eureka服務治理體系進行整合。
  • Eureka負責服務治理,即:微服務實例的自動化註冊與發現。服務註冊與發現都是以應用服務名的形式實現。
  • 遵循AP原則(高可用,分區容錯性),使用了自我保護機制保證了高可用。實現服務發現和故障轉移。

 

二、Eureka兩大組件三大角色git

  • 兩大組件:Eureka Server(提供註冊服務)、 Eureka Client(生產消費服務)。
  • 三大角色:Service Provider和Service Consumer不是嚴格的概念,Service Consumer也能夠隨時向Eureka Server註冊,來讓本身變成一個Service Provider。Eureka Client啓動後,立刻向服務註冊中心註冊。同時,會從Eureka Server上獲取全部實例的註冊信息,包括IP地址、端口等,並緩存到本地。這些信息默認每30秒更新一次。若是與Eureka Server通訊中斷,Service Consumer仍然能夠經過本地緩存與Service Provider通訊。
    • Eureka Server:服務的註冊中心,負責維護註冊的服務列表。
    • Service Provider:服務提供方,做爲一個Eureka Client,向Eureka Server作服務註冊、續約和下線等操做,註冊的主要數據包括服務名、機器ip、端口號、域名等等。
    • Service Consumer:服務消費方,做爲一個Eureka Client,向Eureka Server獲取Service Provider的註冊信息(獲取全部服務的實例清單緩存本地),並經過遠程調用與Service Provider進行通訊。   
  • Eureka Client經過發送心跳請求實現服務註冊、續約。另外,Eureka Server還須要以心跳的形式去監測服務清單中的服務是否可用,若不可用須要從服務清單中剔除,達到排除故障服務的效果。

 

2、搭建服務註冊中心-Eureka Servergithub

一、pom.xmlweb

  首先,建立一個基礎的Spring Boot工程,並引入必要的pom依賴:spring

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/>  
    </parent>
    
    <groupId>com.github.gavincoder</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server</name> 

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--eureka-server服務端引入 -->
       <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
       </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

 二、application.ymlapache

#server
server: port: 8888

#eureka
eureka: instance: hostname: localhost client: #聲明本身是個服務端
    register-with-eureka: false #false表示不向註冊中心註冊本身
    fetch-registry: false       #false表示本身就是註冊中心,職責是維護服務清單,不參與檢索
    service-url:                #設置eureka server對外暴露的地址
      default-zone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

三、啓動類api

  經過@EnableEurekaServer註解開啓服務註冊中心功能。緩存

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

注: springboot

 

四、運行效果

  訪問Eureka Server對外暴露的註冊中心地址:http://${eureka.instance.hostname}:${server.port}

 

 3、搭建Eureka-Client---服務提供者

一、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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/>  
    </parent>
    <groupId>com.github.gavincoder</groupId>
    <artifactId>product</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>product</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
       <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 注:

  • 必須添加web依賴,否則Eureka Client啓動時自動中止,報錯:「Shutting down DiscoveryClient ...」
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
        </dependency>  

 

二、application.yml

#server
server: port: 8886
  
#spring
spring: application: name: eureka-client-product-service #eureka
eureka: client:  serviceUrl: defaultZone: http://localhost:8888/eureka/
#eureka: # instance: # service-url:  # default-zone: http://localhost:8888/eureka/

注:

  • yml屬性配置文件務必檢查是否必要屬性都是有效狀態,無效狀態沒法讀取該屬性值。
  •  示例:以下配置形成eureka client沒法找到註冊中心地址進行註冊,註冊失敗。

啓動報錯:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect

 

三、啓動類

  添加註解:@EnableEurekaClient

package com.github.gavincoder.product; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;  @EnableEurekaClient @SpringBootApplication public class ProductApplication { public static void main(String[] args) { SpringApplication.run(ProductApplication.class, args); } }

 

4、搭建Eureka-Client---服務消費方

一、pom.xml

  ---同服務提供方

 

二、application.yml

#server
server: port: 8885
  
#spring
spring: application: name: eureka-client-order-service #eureka
eureka: client: serviceUrl: defaultZone: http://localhost:8888/eureka/

 

三、啓動類

package com.github.gavincoder.order; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @EnableEurekaClient @SpringBootApplication public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } }

 

4、Eureka運行效果

相關文章
相關標籤/搜索