一塊兒學習使用Spring Cloud Netflix之Eureka

前言

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

本文來源於個人技術博客:http://51think.netgit

1、什麼是eureka

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

2、建立Eureka註冊中心

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

三、填寫Group和Artifact
web

四、勾選Eureka Server
spring

五、建立完成以後的pom文件apache

<?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包,其實這個包下面依賴了不少子包,以下圖:
瀏覽器

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

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

七、配置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端時也要申明這個地址,以便向註冊中心註冊。

3、建立一個服務生產者應用

這裏咱們要建立一個springboot應用做爲服務的生產者,而且可以將服務註冊到註冊中心。對於整個系統而言,咱們建立的是一個服務端應用供客戶端調用,對於Eureka註冊中心而言,除了註冊中心是Server角色,其餘都是Eureka Client角色。具體過程以下:
一、建立model過程與建立Eureka Server相似,名稱爲spring-cloud-eureka-myservice
二、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訪問能力,咱們能夠經過瀏覽器來訪問後臺服務。
三、使用@EnableEurekaClient來標註本身的身份

@EnableEurekaClient
@SpringBootApplication
public class MyServiceApplication {

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

}

四、配置application.yml

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

這個配置項spring.application.name很重要,代表這個應用在微服務架構中的應用名稱,後面的案例中咱們能夠經過這個名稱來訪問這個服務。

五、啓動註冊中心應用spring-cloud-eureka
六、啓動服務生產者應用spring-cloud-eureka-myservice
七、訪問Eureka面板
Eureka提供一個web訪問頁面,經過這個頁面咱們能夠看到已註冊的服務列表以及註冊中心應用的狀態。瀏覽器訪問http://localhost:8010,會展示以下頁面:

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

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

相關文章
相關標籤/搜索