[菜鳥SpringCloud入門]第一章:構(gòu)建多模塊的Maven項目+創(chuàng)建注冊中心Eureka子模塊

在這里插入圖片描述

前言

歡迎來到菜鳥SpringCloud入門實戰(zhàn)系列(SpringCloudForNoob),該系列通過層層遞進的實戰(zhàn)視角,來一步步學習和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎(chǔ)的同學閱讀。

每篇文章末尾都附有本文對應(yīng)的Github源代碼,方便同學調(diào)試。

實戰(zhàn)版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文開始-----

構(gòu)建多模塊的Maven項目 + 創(chuàng)建注冊中心Eureka子模塊

構(gòu)建多模塊的Maven項目

由于SpringCloud中有許多組件,每個組件都需要單獨進行開發(fā)和維護,為了便于統(tǒng)一的版本維護和管理,我們經(jīng)常會用到Maven的多模塊模式。

結(jié)構(gòu)如下:

在這里插入圖片描述

創(chuàng)建主工程

首先創(chuàng)建一個Maven項目作為主工程,類型無所謂,這里建議使用maven-archetype-quickstart骨架,創(chuàng)建過程如下:

File-->New-->Project

-->Maven-->Create from archetype-->maven-archetype-quickstart-Next

-->GroupId={你的GroupId}-->AritifactId={你的ArtifactId}

-->Next-->Next-->Finish-->New Whindow

創(chuàng)建子模塊

在new-module里新建模塊:

在這里插入圖片描述

一路下一步即可:

在這里插入圖片描述

在這里我們新建子模塊名為eureka,用來放之后要用的eureka模塊,新建好后,子模塊的目錄如下:

在這里插入圖片描述

刪除主工程多于目錄

由于并不需要在主工程進行任何代碼開發(fā),所以刪除其src目錄。

可以看到現(xiàn)在我們的目錄結(jié)構(gòu):

在這里插入圖片描述

編輯主工程pom.xml

主工程的pom.xml里做的事:

  • 配置Springboot和SpringCloud基礎(chǔ)組件
  • 配置子模塊:可以看出現(xiàn)在有一個子模塊`<module>eureka</module>``,以后有新的子模塊被創(chuàng)建后,也需要到這里添加上。
<?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.pricemonitor</groupId>
  <artifactId>springcloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>springcloud</name>

  <!--子模塊-->
  <modules>
    <module>eureka</module>
  </modules>

  <!--父級:Spring Boot-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
  </parent>

  <!--參數(shù)-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <!--Spring Cloud 版本序列配置-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Finchley.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!--Spring Boot 執(zhí)行器組件-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--Spring Cloud 基礎(chǔ)-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    <!--Spring Cloud 服務(wù)注冊組件-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <!--此處的依賴是SpringBoot2.0以后專用的,如果您使用的SpringBoot版本低于2.0請使用spring-cloud-starter-eureka-server-->
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--Spring Boot Web組件-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--Spring Boot 測試組件-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

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

</project>

創(chuàng)建注冊中心Eureka子模塊

Eureka介紹

服務(wù)中心又稱注冊中心,管理各種服務(wù)功能包括服務(wù)的注冊、發(fā)現(xiàn)、熔斷、負載、降級等,比如dubbo admin后臺的各種功能。

Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)。Eureka 采用了 C-S 的設(shè)計架構(gòu)。Eureka Server 作為服務(wù)注冊功能的服務(wù)器,它是服務(wù)注冊中心。而系統(tǒng)中的其他微服務(wù),使用 Eureka 的客戶端連接到 Eureka Server,并維持心跳連接。這樣系統(tǒng)的維護人員就可以通過 Eureka Server 來監(jiān)控系統(tǒng)中各個微服務(wù)是否正常運行。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過 Eureka Server 來發(fā)現(xiàn)系統(tǒng)中的其他微服務(wù),并執(zhí)行相關(guān)的邏輯。

Eureka由兩個組件組成:Eureka服務(wù)器和Eureka客戶端。Eureka服務(wù)器用作服務(wù)注冊服務(wù)器。Eureka客戶端是一個java客戶端,用來簡化與服務(wù)器的交互、作為輪詢負載均衡器,并提供服務(wù)的故障切換支持。Netflix在其生產(chǎn)環(huán)境中使用的是另外的客戶端,它提供基于流量、資源利用率以及出錯狀態(tài)的加權(quán)負載均衡。

在這里插入圖片描述

上圖簡要描述了Eureka的基本架構(gòu),由3個角色組成:

1、Eureka Server

  • 提供服務(wù)注冊和發(fā)現(xiàn)

2、Service Provider

  • 服務(wù)提供方
  • 將自身服務(wù)注冊到Eureka,從而使服務(wù)消費方能夠找到

3、Service Consumer

  • 服務(wù)消費方
  • 從Eureka獲取注冊服務(wù)列表,從而能夠消費服務(wù)

編輯子模塊Eureka的pom.xml

接下來我們在子模塊Eureka中創(chuàng)建一個SpringCloud的注冊中心Eureka

代碼重點:

  • 繼承了父pom.xml
  • 可以看到這里并沒有引入任何新的依賴,那如何引入eureka組件依賴呢,回到上面的主pom.xml,你會發(fā)現(xiàn)我在其中引入了spring-cloud-starter-netflix-eureka-server,這是因為在之后的大部分模塊中,我們都會用到Eureka-server,所以將其放在主pom中供其他子模塊共享使用
  • 子模塊是可以打包jar運行的:<packaging>jar</packaging>
<?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>

    <artifactId>eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka</name>
    <packaging>jar</packaging>
    <description>Demo project for Spring Boot</description>

    <!--父工程的依賴-->
    <parent>
        <groupId>com.pricemonitor</groupId>
        <artifactId>springcloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <dependencies>

    </dependencies>

</project>

添加啟動代碼中添加@EnableEurekaServer注解

EurekaApplication.java

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

如果你發(fā)現(xiàn)@EnableEurekaServer無法引入,請檢查你的SpringCloud版本與SpringBoot版本是否兼容

配置文件

默認生成的配置文件是application.properties,也可以寫成application.yml格式,配置如下:

# 端口號
server:
  port: 8761
# 服務(wù)注冊相關(guān)配置
eureka:
  # 服務(wù)實例主機名
  instance:
    hostname: localhost
  # 服務(wù)提供者配置
  client:
    # 不進行注冊(當服務(wù)注冊中心是單點而非高可用時的配置方式)
    registerWithEureka: false
    # 不獲取注冊信息(當服務(wù)注冊中心是單點而非高可用時的配置方式)
    fetchRegistry: false
    # 服務(wù)注冊中心地址
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

注意:

  • registerWithEureka: false表示當前服務(wù)注冊中心不在其他服務(wù)注冊中心進行注冊。
  • fetchRegistry: false表示當前服務(wù)注冊中心不獲取其他服務(wù)注冊中心的注冊信息。
  • 以上兩個配置,只有在當服務(wù)注冊中心是單點配置時才如此配置,因為單點情況下這兩個值必然為false。

運行

在這里插入圖片描述

可以看到下面的頁面,其中還沒有發(fā)現(xiàn)任何服務(wù),這只是一個孤零零的eureka-server。

在下一個教程中,我們將創(chuàng)建服務(wù)提供者并在Eureka進行注冊。

參考

Spring-Cloud筆記01:IDEA中同一個項目啟動多個實例:

https://blog.csdn.net/hanchao5272/article/details/80558190

Spring-Cloud筆記02:IDEA中構(gòu)建多模塊的Maven項目:

https://blog.csdn.net/hanchao5272/article/details/80558780

springcloud(二):注冊中心Eureka:

http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容