Spring Cloud 實現微服務系列之服務發現與註冊(二)

[toc]java

前言

前面說到,要用微服務, 就要解決微服務的幾個核心問題 具體可看第一篇文章。這篇文章是學習使用Spring Cloud Netflix 的 Eureka 組件。經過這個組件,咱們能夠建立一個服務的註冊與發現中心服務來管理咱們服務。這是解決以後的其餘問題的基礎。只有全部的服務都註冊到註冊中心中, 纔有利於作後續的服務間調用和服務監控等。git

建立統一的依賴管理項目


爲何要建立依賴管理項目?

在建立服務註冊中心的項目前, 咱們先建立一個依賴管理項目。爲何要有依賴管理項目?github

  1. 因爲微服務建立的項目不少, 項目中使用到的依賴會有大部分相同的,須要利用maven的可繼承屬性把相同依賴抽取出來。
  2. 統一管理依賴包的版本號。更改方便,只須要在這一個地方找就好了。 避免不一樣版本號形成依賴衝突。
  3. 人家spring都是這麼作的... 好吧, 這是開玩笑的。不過spring 確認是這樣作的。點開spring-boot-starter-parent這個依賴能夠看到它的父pom就是一個依賴管理項目(spring-boot-dependencies

建立項目

建立一個目錄名爲hello-spring-cloud-dependencies, 新建pom文件,內容以下:web

<?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.3.RELEASE</version>
    </parent>

    <groupId>com.domain</groupId>
    <artifactId>hello-spring-cloud-dependencies</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>hello-spring-cloud-dependencies</name>
    <url>http://www.baidu.com</url>
    <inceptionYear>2018-Now</inceptionYear>

    <properties>
        <!-- Environment Settings -->
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Spring Settings -->
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        <spring-boot-admin.version>2.0.1</spring-boot-admin.version>
        <zipkin.version>2.10.1</zipkin.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Cloud Begin  微服務框架-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud End -->

            <!-- Spring Boot Admin Begin    用來管理和監控spring boot 應用程序-->
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-server</artifactId>
                <version>${spring-boot-admin.version}</version>
            </dependency>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-client</artifactId>
                <version>${spring-boot-admin.version}</version>
            </dependency>
            <!-- Spring Boot Admin End -->

            <!-- ZipKin Begin  鏈路追蹤系統-->
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
                <version>${zipkin.version}</version>
            </dependency>
            <!-- ZipKin End -->
        </dependencies>
    </dependencyManagement>

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

        <!-- 資源文件配置 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

    </build>
</project>
複製代碼

大體說下pom文件內容意思, parent 繼承spring-boot-starter-parent表示這是一個spring boot項目,而後聲明瞭,項目的組織,項目名版本等。而後在dependencyManagement節點聲明瞭 一些依賴, 這些依賴因爲聲明在dependencyManagement節點中, 因此並真實依賴進本項目或者是子項目,只是起了一個聲明做用。 若是須要真實依賴使用, 須要在使用地方再次聲明一次,此次聲明不帶版本。能夠看出, 咱們這個依賴管理項目, 只是把依賴抽取到這個地方統一管理而已。若是實在看不懂pom文件內容的,建議去補maven知識。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>com.domain</groupId>
        <artifactId>hello-spring-cloud-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>hello-spring-cloud-eureka</artifactId>
    <packaging>jar</packaging>

    <name>hello-spring-cloud-eureka</name>
    <url>http://www.baidu.com</url>
    <inceptionYear>2018-Now</inceptionYear>

    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.domain.hello.spring.cloud.eureka.EurekaApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
複製代碼

**內容說明:**這裏就兩個依賴, 一個是spring boot測試包依賴, 一個是eureka依賴, 這個就是Spring cloud 提供的服務註冊與發現組件, 當咱們微服務中的各個服務啓動後, 會自動註冊到這個註冊中心, 方便咱們對各個服務管理、使用。bash

eureka配置

配置文件內容以下:服務器

spring:
  application:
    name: hello-spring-cloud-eureka
server:
  port: 8881
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

複製代碼

內容說明: 前面是配置咱們服務的名稱,端口。eureka 這個節點下面是eureka的相關配置,hostname是咱們服務器地址, client的兩個屬性是配置是否客戶端, 這裏寫false,表示這是eureka的服務端。其餘服務要做爲客戶端來註冊到咱們這個服務端。defaultZone 是eureka的地址。客戶端就是經過這個地址來註冊到咱們 eureka的服務端。app

服務查看頁面

當服務註冊到eureka後, 咱們能夠經過一個web 頁面來查看。啓動服務後,訪問服務地址。 框架

服務查看頁面

頁面中紅色框選的地方會顯示當前全部註冊到eureka的服務。不過當前尚未服務註冊上去。等下一篇文章節說服務提供者的, 咱們把服務註冊上去,就能看見了。

完整代碼

完整代碼在這裏: github.com/domain9065/…

全部文章目錄及說明

有關文章的說明和目錄都在這裏了:juejin.im/post/5dbadf…

相關文章
相關標籤/搜索