• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringCloud 學習筆記01 服務注冊與發現

    一、Spring Cloud簡介

    image.png

    二、創建服務注冊中心

    采用Eureka作為服務注冊與發現的組件

    首先創建一個maven主工程 兩個子工程一個model工程作為服務注冊中心,即Eureka Server,另一個作為Eureka Client。

    在其父pom文件引入依賴,spring Boot版本為2.1.5.RELEASE,Spring Cloud版本為Greenwich.RELEASE。后面同系列文章其父pom文件與其保持一致。

    父pom文件起到依賴版本控制的作用,其他module工程繼承該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>
    
      <groupId>com.xdarker</groupId>
      <artifactId>sc-demo1</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>pom</packaging>
      <name>sc-demo1</name>
    
      <modules>
        <module>eureka-server</module>
        <module>service-hi</module>
      </modules>
    
    
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
      </parent>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
    
      </dependencies>
    
      <!--只是對版本進行管理,不會實際引入jar-->
      <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>

    Eureka Server pom.xml繼承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依賴

    <?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">
        <parent>
            <artifactId>sc-demo1</artifactId>
            <groupId>com.xdarker</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>eureka-server</artifactId>
        <packaging>jar</packaging>
        <name>eureka-server</name>
    
        <dependencies>
            <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>
                </plugin>
            </plugins>
        </build>
    </project>

    啟動一個服務注冊中心,只需要一個注解@EnableEurekaServer,這個注解需要在springboot工程的啟動application類上加:

    package com.xdarker;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    /**
     * Hello world!
     *
     */
    @SpringBootApplication
    //啟動一個服務注冊中心
    @EnableEurekaServer
    public class EurekaServerApplication
    {
        public static void main( String[] args )
        {
           SpringApplication.run(EurekaServerApplication.class,args);
        }
    }

    eureka server的配置文件appication.yml:

    eureka:
       client:
          #此客戶端是否獲取eureka服務器注冊表上的注冊信息,默認為true
          fetch-registry: false
          #實例是否在eureka服務器上注冊自己的信息以提供其他服務發現,默認為true
          register-with-eureka: false
       instance:
          hostname: localhost
    server:
       port: 11000
    spring:
       application:
          name: eureka-server

    eureka server 是有界面的,啟動工程,打開瀏覽器訪問:http://localhost:11000,界面如下:

    image.png

    三、創建一個服務提供者 (eureka client)

    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">
        <parent>
            <artifactId>sc-demo1</artifactId>
            <groupId>com.xdarker</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>service-hi</artifactId>
        <packaging>jar</packaging>
    
        <name>service-hi</name>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </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-web</artifactId>
            </dependency>
    
        </dependencies>
    
        <build>
           <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>

    通過注解@EnableDiscoveryClient 表明自己是一個eurekaclient

    package com.xdarker;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * Hello world!
     *
     */
    @SpringBootApplication
    @EnableDiscoveryClient
    //@EnableDiscoveryClient和@EnableEurekaClient共同點就是:都是能夠讓注冊中心能夠發現,掃描到改服務。
    //不同點:@EnableEurekaClient只適用于Eureka作為注冊中心,@EnableDiscoveryClient 可以是其他注冊中心。
    public class Application
    {
        public static void main( String[] args )
        {
            SpringApplication.run(Application.class,args);
        }
    }

    Controller類

    package com.xdarker.controller;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 文件名稱:ServiceHiController
     * 本類描述:
     * 日期:2019/5/27 11:16
     *
     * @author XDrker
     * @version 1.0
     */
    @RestController
    public class ServiceHiController {
    
        @Value("${server.port}")
        String port;
    
        @GetMapping("/hi")
        public String home(@RequestParam(value = "name") String name) {
            return "hi " + name + " ,i am from port:" + port;
        }
    
    }

    在配置文件中注明自己的服務注冊中心的地址,application.yml配置文件如下:

    eureka:
        client:
            serviceUrl:
    #        eureka.client.serviceUrl.defaultZone屬性對應服務注冊中心的配置內容,指定服務注冊中心的位置
                defaultZone: http://localhost:11000/eureka/
    server:
        port: 12001
    spring:
        application:
            name: service-hi

    需要指明spring.application.name,這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個name 。
    啟動工程,打開http://localhost:12001 ,即eureka server 的網址:

    image.png

    你會發現一個服務已經注冊在服務中了,服務名為SERVICE-HI ,端口為12001

    這時打開 http://localhost:8762/hi?name=XDrker ,你會在瀏覽器上看到 :

    image.png

    問題:將客戶端關閉后,再次打開Eureka的注冊頁面,發現有一串紅字:

    image.png

    Eureka的自我保護模式

    默認情況下,如果EurekaServer在一定時間內沒有接收到某個微服務實例的心跳時,EurekaServer將會注銷該實例(默認90s)。但是當網絡發生故障時,微服務與EurekaServer之間無法通信,這樣就會很危險了,因為微服務本身是很健康的,此時就不應該注銷這個微服務,而Eureka通過自我保護機制來預防這種情況,當網絡健康后,該EurekaServer節點就會自動退出自我保護模式;

    這時再次將客戶端微服務啟動,刷新服務注冊中心會發現,自我保護狀態已取消。

     

    參考博客:方志朋

    版權聲明:本文為weixin_39723337原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_39723337/article/details/90610768

    智能推薦

    SpringCloud學習-(2)服務的注冊與發現(Eureka)

    前面SpringBoot已經介紹了SpringBoot相關使用,如果對SpringBoot不了解可以先看一下。 1.SpringCloud介紹 SpringCloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等,運行環境簡單。SpringCloud是基于SpringBoot的。 2.創建服務注冊中心 在這里...

    SpringCloud學習教程一( 服務的注冊與發現 Eureka)

    本文是根據方志明的springCloud學習教程進行個人細化,記錄個人學習的教程可能會做一些小的修改讓文章更便于理解, 原著參考案例全部采用Spring Boot 1.5.x ,Spring Cloud版本為Dalston.RELEASE 一、spring cloud簡介 spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線...

    Springcloud學習之路------------Eureka服務注冊與發現

    建立eureka服務端 一、建model 如:cloud-eureka-server7001 二、改pom 添加依賴eureka-server 表示這是一個eureka服務端 三、改配置 集群板eureka: 就是把defaultZone 指向其他eureka的hostname ,如果有多個則用逗號隔開。 單機版eureka: 就是指向自己的hostname 四、主啟動 在主啟動上加入@Enabl...

    springCloud學習【一】:服務的注冊發現與消費【實例】

    springCloud之微服務的注冊發現與消費 `個人學習記錄而已,沒事就回來看看,給自己漲記性` 準備:新建一個空的maven項目用來當父項目【CloudDemo】我就是拿他當個根目錄而已 一、項目準備:CloudDemo僅當作父項目使用【各個項目的根目錄而已】 二、創建注冊中心模塊`cloud-registry` *SpringBoot項目* 三、注冊中心的配置【yml格式】 四、搞定,注冊中...

    springcloud 服務注冊與發現

    服務注冊 1:   2:   3:       服務發現 2:     3:                        ...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡