04-微服務之 SpringCloud
阿新 • • 發佈:2022-05-28
什麼是 SpringCloud
SpringCloud 就是基於 SpringBoot 提供的一套微服務解決方案,是關注全域性的微服務協調治理框架,是各個微服務架構落地技術的集合體。
SpringCloud 與 SpringBoot 的關係
- SpringBoot 專注於快速開發單個個體微服務
- SpringCloud 是關注全域性的微服務協調治理框架,它將 SpringBoot 開發的微服務整合並管理起來,為各個微服務之間提供:配置管理、服務發現、斷路器、路由、代理、事件匯流排等整合服務
- SpringBoot 可以離開 SpringCloud 獨立使用,而 SpringCloud 離不開 SpringBoot
SpringCloud 與 SpringBoot 的版本選擇
- 訪問官網 https://spring.io/ 進入 Project -> SpringCloud,如下圖
SpringCloud Netflix 環境搭建
-
建立通用 Maven 專案:spring-cloud-netflix
-
作為總工程,只留一個 pom.xml 檔案即可
-
編寫 pom 定義依賴管理
pom.xml
<?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.kaishen</groupId> <artifactId>spring-cloud-netflix</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>pom</packaging> <!-- 版本號 --> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <!-- 日誌相關 --> <log4j.version>2.17.2</log4j.version> <logback.version>1.3.0-alpha14</logback.version> <!-- json 相關 --> <json.version>20220320</json.version> <gson.version>2.9.0</gson.version> <!-- J2EE 相關 --> <lombok.version>1.18.24</lombok.version> <lang3.version>3.12.0</lang3.version> <dom4j.version>2.1.3</dom4j.version> <commons-io.version>2.11.0</commons-io.version> <guava.version>31.1-jre</guava.version> <!-- 資料庫相關 --> <druid.version>1.2.9</druid.version> <mysql.version>5.1.47</mysql.version> <mybatis.version>2.2.2</mybatis.version> <!-- Netflix Component version --> <netflix.component.version>1.4.7.RELEASE</netflix.component.version> </properties> <!-- 依賴管理,此處做管理,每個Module需自行引入所需依賴 --> <dependencyManagement> <dependencies> <!-- SpringCloud 依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.12.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- region 通用元件 --> <!-- log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <!-- json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <!-- google json --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- lang3 Java 第二 API --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${lang3.version}</version> </dependency> <!-- dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>${dom4j.version}</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!-- guava 執行緒池技術 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <!-- endregion --> <!-- region Netflix Component --> <!-- Eureka Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Eureka Client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Zuul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Config Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>3.1.2</version> </dependency> <!-- Config Client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>3.1.2</version> </dependency> <!-- endregion --> </dependencies> </dependencyManagement> </project>
-
打包方式改為 pom
-
建立 Module,每個 Module 都是一個獨立的微服務
SpringCloud Alibaba 環境搭建
由於 SpringCloud Netflix 相關元件停更,Alibaba 便在原有 SpringCloud 的基礎上推出了一套替代方案
-
建立通用 Maven 專案:spring-cloud-alibaba
-
作為總工程,只留一個 pom.xml 檔案即可
-
編寫 pom 定義依賴管理
pom.xml
<?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.kaishen</groupId> <artifactId>springcloud</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>pom</packaging> <!-- 屬性配置 --> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <!-- 日誌相關 --> <log4j.version>2.17.2</log4j.version> <logback.version>1.3.0-alpha14</logback.version> <!-- json 相關 --> <json.version>20220320</json.version> <gson.version>2.9.0</gson.version> <!-- J2EE 相關 --> <lombok.version>1.18.24</lombok.version> <lang3.version>3.12.0</lang3.version> <dom4j.version>2.1.3</dom4j.version> <commons-io.version>2.11.0</commons-io.version> <guava.version>31.1-jre</guava.version> <!-- 資料庫相關 --> <druid.version>1.2.9</druid.version> <mysql.version>5.1.47</mysql.version> <mybatis.version>2.2.2</mybatis.version> <!-- SpringCloud 元件相關 --> <springcloud.version>2021.0.2</springcloud.version> <alibaba.cloud.version>2021.0.1.0</alibaba.cloud.version> <springboot.version>2.6.7</springboot.version> <zk.version>3.1.1</zk.version> <consul.version>3.1.0</consul.version> </properties> <!-- 依賴管理,此處做管理,每個 Module 需自行引入所需依賴 --> <dependencyManagement> <dependencies> <!-- SpringCloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${springcloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Alibaba Cloud --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${alibaba.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- region 通用元件 --> <!-- log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <!-- json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <!-- google json --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- lang3 Java 第二 API --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${lang3.version}</version> </dependency> <!-- dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>${dom4j.version}</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!-- guava 執行緒池技術 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <!-- endregion --> <!-- Zookeeper --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <version>${zk.version}</version> </dependency> <!-- Consul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>${consul.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
-
打包方式改為 pom
-
建立 Module,每個 Module 都是一個獨立的微服務