Spring Cloud全集文章目錄:
https://blog.csdn.net/weixin_38007185/article/details/108186254?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-5&spm=1001.2101.3001.4242
零、什么是微服務?一看就會系列!
一、手把手教你搭建SpringCloud項目(一)圖文詳解,傻瓜式操作
二、手把手教你搭建SpringCloud項目(二)生產者與消費者
三、手把手教你搭建SpringCloud項目(三)集成Eureka服務注冊中心
四、手把手教你搭建SpringCloud項目(四)Eureka集群版搭建
五、手把手教你搭建SpringCloud項目(五)生產者集群版搭建
六、手把手教你搭建SpringCloud項目(六)Eureka實現服務發現
七、手把手教你搭建SpringCloud項目(七)集成Consul服務注冊中心
八、手把手教你搭建SpringCloud項目(八)集成Ribbon負載均衡器
九、手把手教你搭建SpringCloud項目(九)集成OpenFeign服務接口調用
十、手把手教你搭建SpringCloud項目(十)集成Hystrix之服務降級
十一、手把手教你搭建SpringCloud項目(十一)集成Hystrix之服務熔斷
十二、手把手教你搭建SpringCloud項目(十二 )集成Hystrix之圖形化Dashboard實時監控
十三、手把手教你搭建SpringCloud項目(十三 )集成Gateway新一代網關
十四、手把手教你搭建SpringCloud項目(十四 )集成Config分布式配置中心
十五、手把手教你搭建SpringCloud項目(十五)集成Bus消息總線
十六、手把手教你搭建SpringCloud項目(十六)集成Stream消息驅動
十七、手把手教你搭建SpringCloud項目(十七)集成Sleuth分布式鏈路跟蹤
文章繼續更新中,歡迎關注!
Spring Cloud 是什么?
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分布式系統的開發,比如服務發現、服務網關、服務路由、鏈路追蹤等。Spring Cloud 並不重復造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從而減少了各模塊的開發成本。換句話說:Spring Cloud 提供了構建分布式系統所需的“全家桶”。
Spring Cloud 現狀
目前,國內使用 Spring Cloud 技術的公司並不多見,不是因為 Spring Cloud 不好,主要原因有以下幾點:
Spring Cloud 中文文檔較少,出現問題網上沒有太多的解決方案。
國內創業型公司技術老大大多是阿里系員工,而阿里系多采用 Dubbo 來構建微服務架構。
大型公司基本都有自己的分布式解決方案,而中小型公司的架構很多用不上微服務,所以沒有采用 Spring Cloud 的必要性。
但是,微服務架構是一個趨勢,而 Spring Cloud 是微服務解決方案的佼佼者,這也是作者寫本系列課程的意義所在。
Spring Cloud 優缺點
其主要優點有:
集大成者,Spring Cloud 包含了微服務架構的方方面面。
約定優於配置,基於注解,沒有配置文件。
輕量級組件,Spring Cloud 整合的組件大多比較輕量級,且都是各自領域的佼佼者。
開發簡便,Spring Cloud 對各個組件進行了大量的封裝,從而簡化了開發。
開發靈活,Spring Cloud 的組件都是解耦的,開發人員可以靈活按需選擇組件。
它的缺點:
項目結構復雜,每一個組件或者每一個服務都需要創建一個項目。
部署門檻高,項目部署需要配合 Docker 等容器技術進行集群部署,而要想深入了解 Docker,學習成本高。
Spring Cloud 的優勢是顯而易見的。因此對於想研究微服務架構的同學來說,學習 Spring Cloud 是一個不錯的選擇。
Spring Cloud 項目搭建
溫馨提示:要有一定的springboot的基礎呦!
上一篇文章我們了解了微服務,光了解了還不夠,最主要的還是要動手實踐,因為實踐是檢驗真理的唯一標准,只有理論和實踐都掌握了,才是真的學會了。我們知道微服務是有多個服務,將不同的業務放到不同的服務當中,然后各個服務之間相互調用。所以我們要新建一個總工程(父工程)來管理下邊的其他微服務工程。全程使用maven項目進行搭建,和springboot搭建是一樣的。下面我們開始搭建!
項目搭建圖:
我們首先先構建父工程,這里使用的是maven項目進行構建。
gav填寫,根據自己的習慣進行填寫,然后點擊Next
出現如下界面,點擊Finish,此時新建項目完成。
接下我們就先配置,首先我們先配置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.study.springcloud</groupId>
<artifactId>mcroservice</artifactId>
<!-- 首先修改打包方式 -->
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<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>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.10</druid.version>
<junit.version>4.1.2</junit.version>
<lombok.version>1.16.10</lombok.version>
<log4j.vsrsion>1.2.17</log4j.vsrsion>
</properties>
<!-- 因為是總項目 所以用dependencyManagement來管理 因為其他的子項目就不會來管理版本了了 可以直接引用 -->
<dependencyManagement>
<dependencies>
<!-- springcloud的依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboot的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 數據庫-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- springboot啟動器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--單元測試 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.vsrsion}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
因為我們父工程是不寫業務的,其中我們可以將src文件夾刪除,將一些沒用的文件進行設置不顯示或者刪除。我們此時父工程就搭建完成了,就是這么簡單。
接下來,我們就可以進行繼續搭建其他的微服務工程了。我們首先搭建一個專門放我們實體類的服務,來讓其他服務來調用。
選中我們的父工程點擊New,在點擊Module,如下圖:
這里是跟見父工程一樣。
填寫我們的Module的項目名稱。
注意下面這一步是Module name處用將我們項目名的-省略,因為實際項目中有更多的工程,我們為了方便看的更清楚,需要加-來進行分割!然后我們點擊Finish。
此時我們的第一個微服務工程就建立完成了,接下來就是配置啦。我們首先配置POM.xml文件。這里我們引入了Hutool這個jar包,它是一個Java基礎工具類,對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝,組成各種Util工具類,同時提供以下組件:
布隆過濾
緩存
克隆接口
類型轉換
日期處理
數據庫ORM(基於ActiveRecord思想)
基於DFA有限自動機的多個關鍵字查找
HTTP客戶端
IO和文件
有用的一些數據結構
日志
反射代理類的簡化(AOP切面實現)
Setting(一種擴展Properties的配置文件)
System(JVM和系統信息等)
WatchService的封裝(文件變動監控)
XXXUtil各種有用的工具類
用起來也別方便,使我們java開發中的神器。
<?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>mcroservice</artifactId>
<groupId>com.study.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-api-commons</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
這是我們就可以在該服務中寫的pojo類,我們這里以支付為例,所以我們先在數據中建議一張支付的表。sql語句如下
CREATE TABLE `payment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`serial` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我們為該表添加數據,sql語句如下:
insert into `payment`(`id`,`serial`) values (1,'百度'),(2,'alibaba'),(3,'京東'),(4,'頭條');
建表和添加數據完成了,我們就新建對應的實體類。下圖為項目結構圖:
payment表對應的實體類。這里使用了lombok,上面的pom文件導入了依賴,但是需要安裝lombok插件,不然會報錯!如下圖:
package com.buba.springcloud.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
//網絡通信 一定要實現序列化
//使用lombok 沒有配置的童鞋要去百度查一下 jar我們導入了 需要在idea裝一個插件就可以了
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Payment implements Serializable {
private Long id;
// 微服務 一個服務對應一個數據庫,同一個信息可能存在不同的數據庫
private String serial;
}
為了數據傳輸的方便,也為了前后端分離項目,我們將返回的數據進行封裝,封裝成一個實體類。
package com.buba.springcloud.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class CommonResult<T> {
private Integer code;//返回狀態碼
private String message;//返回是否調用成功
private T data; //返回的數據
public CommonResult(Integer code, String message) {
this(code,message,null);
}
}
我們實體類的服務主要存放實體類,也不寫業務邏輯,我們也可以將src文件夾刪除掉。此時我們就將總工程和提供實體類的微服務工程搭建成功了。因為實體類的服務工程需要其他的各個服務工程調用,所以要將實體類的服務進行打包放到公用的本地庫中。
我們首先將該工程clean,確保當前工程的maven的配置是否成功。
出現如下界面說明當前工程的maven配置環境沒有問題
那接下來我們就開始install打包放到本地庫中。如下為成功界面:
此時我們可以看到我們總工程的pom.xml文件引入了cloud-api-commons,如下圖:
我們下一篇文章將要搭建生產者和消費者的微服務工程啦。文章持續更新中,歡迎點贊關注!