前言
歡迎來到菜鳥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