一起學習使用Spring Cloud Netflix之Eureka

前言

spring cloud爲互聯企業構建微服務提供了一整套的技術組件,其中Eureka是Spring Cloud體系中的核心。Netfix不是一個技術概念,它原本是國外一個視頻網站的名稱。這個視頻網站的技術團隊在微服務方向做了大量實踐,並提供了很多的技術組件,Eureka就是其中之一。筆者也是Spring Cloud初學者,本文從創建項目工程開始,一步一步開始講解如何創建eureka服務端和客戶端,一起學習,共同進步。

本文來源於我的技術博客:http://51think.net

一、什麼是eureka

我們經常看到一些互聯網企業在描述其技術架構時會使用到Eureka一詞,也聽說過Eureka用於服務註冊發現,並不清楚它是如何整合到應用層的。從代碼結構上來看,Eureka就是一個大jar包集合,maven引入這個jar包集合,並在應用層做簡單配置即可實現服務發現功能。也就是說,Spring Cloud已經將相關功能封裝的很好了,直接引用就行了,這也符合各種流行框架的宗旨,最大程度的降低非業務性的工作量,讓程序員更加專注實現自己的業務功能。Eureka這個組件是不能單獨運行的,需要以Springboot作爲應用載體,真正的部署到虛機上面才能運行。

二、創建Eureka註冊中心

註冊中心,顧名思義,類似於zookeeper一樣,提供服務註冊發現功能,即服務端的服務地址通過註冊中心全部暴露給客戶端,由客戶端實現負載均衡。下面我們使用idea工具創建相關項目。
1、創建一個maven主工程
2、在主工程下創建一個model,本例中命名爲spring-cloud-eureka

3、填寫Group和Artifact

4、勾選Eureka Server

5、創建完成之後的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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-cloud-eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-eureka</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

pom文件中只有一個關鍵的spring-cloud-starter-netflix-eureka-server包,其實這個包下面依賴了很多子包,如下圖:

6、找到Springboot的啓動類,加上@EnableEurekaServer註解
@EnableEurekaServer代表這個springboot應用是一個註冊中心。

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

7、配置application.yml

server:
  port: 8010

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

其中兩個屬性registerWithEureka: false fetchRegistry: false表明這個應用是Eureka Server端,而不是Client端。defaultZone用來申明這個註冊中心的地址,後面創建Eureka Client端時也要申明這個地址,以便向註冊中心註冊。

三、創建一個服務生產者應用

這裏我們要創建一個springboot應用作爲服務的生產者,並且能夠將服務註冊到註冊中心。對於整個系統而言,我們創建的是一個服務端應用供客戶端調用,對於Eureka註冊中心而言,除了註冊中心是Server角色,其他都是Eureka Client角色。具體過程如下:
1、創建model過程與創建Eureka Server類似,名稱爲spring-cloud-eureka-myservice
2、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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-cloud-eureka-myservice</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-eureka-myservice</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

大家可以比較一下這個pom文件與之前的pom文件的差別,spring-cloud-starter-netflix-eureka-clien組件和之前註冊中心pom文件中的spring-cloud-starter-netflix-eureka-server相對應。spring-boot-starter-web組件用來提供web訪問能力,我們可以通過瀏覽器來訪問後臺服務。
3、使用@EnableEurekaClient來標註自己的身份

@EnableEurekaClient
@SpringBootApplication
public class MyServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyServiceApplication.class, args);
    }

}

4、配置application.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8010/eureka/
server:
  port: 8011
spring:
  application:
    name: myservice

這個配置項spring.application.name很重要,表明這個應用在微服務架構中的應用名稱,後面的案例中我們可以通過這個名稱來訪問這個服務。

5、啓動註冊中心應用spring-cloud-eureka
6、啓動服務生產者應用spring-cloud-eureka-myservice
7、訪問Eureka面板
Eureka提供一個web訪問頁面,通過這個頁面我們可以看到已註冊的服務列表以及註冊中心應用的狀態。瀏覽器訪問http://localhost:8010,會展現如下頁面:

紅框標註的部分即我們剛剛啓動的spring-cloud-eureka-myservice應用,服務名稱爲myservice。
至此,Eureka Server端和Client端已經部署成功。

源碼地址:https://github.com/huangyubia...

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