SpringCloud(Finchley.RELEASE版本)入門學習之————Eureka服務的註冊與發現學習

一、什麼是服務的註冊與發現?

服務註冊:

在服務治理框架中,通常會有一個註冊中心,每個服務單元向註冊中心登記自己提供的服務,將主機與端口號、版本號、通信協議等一些附加信息告知註冊中心,註冊中心按服務名分類組織服務清單。

服務發現:

由於在服務治理框架下運作,服務間的調用不再通過制定的實例地址來實現,而是通過向服務名發起請求調用實現。所以,服務調用方在調用服務提供方接口的時候,並不知道具體的服務實例位置。因此需要向服務註冊中心諮詢服務,並獲取所有服務的實例清單,以實現對具體服務實例的訪問。

二、搭建過程

1、新建一個maven主工程

新建一個maven主工程,作爲父工程,用於版本控制,其他module工程都依賴於該父工程。springcloud版本 Finchley.RELEASE;SpringBoot版本2.0.3.RELEASE。


<?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.demo.cloud</groupId>
    <artifactId>spring-Cloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>

    <modules>
        <module>eureka-server</module><!--eureka服務端-->
        <module>eureka-client</module><!--eureka客戶端-->
    </modules>

    <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>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <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>
2、 搭建服務註冊中心 Eureka服務端

eureka 服務端,也叫做服務註冊中心。它同其他服務註冊中心一樣,支持高可用配置。它依託於強一致性提供良好的服務實例可用性,可以應對多種不同的故障場景。如果Eureka以集羣模式部署,當集羣種有分片出現故障時,那麼Eureka就轉入自我保護模式。

構建步驟:
右鍵工程>>new一個Module工程>>maven/spring initialir;這裏以maven爲例。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在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>com.demo.cloud</groupId>
        <artifactId>spring-Cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.demo.cloud</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>


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

    </dependencies>


</project>



通過 @EnableEurekaServer註解啓動一個服務註冊中心提供給其他應用進行對話。
很簡單,在springboot啓動類上添加此註解即可。


@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

在默認設置下,服務註冊中心也會將自己作爲客戶端來嘗試註冊自己,所以我們需要禁用它的客戶端註冊行爲,配置如下


server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #代表不向註冊中心註冊自己
    fetch-registry: false #不需要去檢索服務
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
  application:
    name: eureka-server

啓動,訪問
在這裏插入圖片描述
No instances available 表示尚未服務註冊進來。

3、搭建服務提供者 Eureka客戶端

eureka 客戶端,主要處理服務的註冊與發現。客戶端服務通過註解和參數配置的方式,嵌入在客戶端應用程序代碼中,在應用程序運行時,eureka客戶端向註冊中心註冊自身提供的服務並週期性地發送心跳來更新它的服務租約。同時它也能從服務端查詢當前註冊的服務信息並把他們緩存到本地並週期性的刷新服務狀態。

構建步驟:
步驟同上面構建服務端一樣,構建一個maven工程,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>spring-Cloud</artifactId>
        <groupId>com.demo.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>


    <groupId>com.szz.spring</groupId>
    <artifactId>eureka-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>eureka-client</name>
    <description>Demo project for Spring Boot</description>

    <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>

通過@EnableEurekaClient 註解聲明自己是一個eureka 客戶端

package com.demo.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @ClassName EurekaClientApplication
 * @Description TODO
 * @Author shanzz
 * @Date 2019/5/24 16:01
 * @Version 1.0
 **/

@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class);
    }
}

最後在我們的配置文件中通過spring.application.name屬性來命名服務名(很重要,以後服務與服務之間調用一般都根據這個name);通過eureka.client.serviceUrl.defaultZone指定服務註冊中心地址;配置如下:


server:
  port: 8762
spring:
  application:
    name: eureka-client
eureka:
  client:
    service-url:
      defalutZone: http://localhost:8761/eureka/


啓動服務:
在這裏插入圖片描述
可以看到此時我們已經註冊進來。

【參考資料】
《Spring Cloud微服務實戰》
https://www.cnblogs.com/snake23/p/9489916.html?tdsourcetag=s_pcqq_aiomsg

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