菜鸟Spring Cloud入门教程
1、什么是Spring Cloud?
Spring cloud流應用程序啟動時基于Spring Boot的Spring集成應用程序,提供與外部系統的集成。Spring Cloud Task,一個生命期短暫的微服務框架,用于快速構建執行有限數據處理的應用程序。
2、使用Spring Cloud的優勢?
1、易于開發和維護
2、單個微服務啟動較快
3、技術棧不受限
4、按需伸縮
3、Spring Cloud的劣勢
1、運維要求較高
2、分布式固有的復雜性
3、接口調整成本高(修改某一微服務的API,所有引用都要調整)
4、重復勞動(某一個功能未達到微服務的程度,各個服務會開發此功能。方案是公共組件,但多語言環境不一定適用)
4、Spring Cloud設計原則
1、單一職責原則
2、服務自治原則
3、輕量級通信機制
4、微服務粒度
5、Spring Cloud的5個常用組件
Netflix Eureka - 服務發現
Netflix Ribbon - 客戶端負載均衡
Netflix Hystrix - 斷路器
Netflix Zuul - 服務網關
Spring Cloud Config - 分布式配置
Netflix Eureka
作用:實現服務治理(服務注冊和發現)
說明:Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。有兩個組件組成:Eureka服務端和Eureka客戶端。
Eureka服務端作用服務注冊中心,支持集群部署。
Eureka客戶端是一個java客戶端,用來處理服務注冊和發現。
原理:在應用啟動時,Eureka客戶端向服務端注冊自己的服務信息,同時將服務端的服務信息緩存到本地,客戶端會和服務端周期性買的進行心跳交互,以便更新服務租約和服務信息。
Netflix Ribbon
作用:Ribbon 主要提供客戶側的軟件負載均衡算法。
說明:Spring Cloud Ribbon是一個基于HTTP和TCP的客戶端負載均衡工具,它基于Netflix Ribbon實現。通過Spring Cloud的封裝,可以輕松的將面向服務的REST模板請求自動轉換成客戶端負載均衡的服務調用。
關鍵點就是將外界的rest調用,根據負載均衡策略轉換為微服務的調用。Ribbon有比較多的負載均衡策略。
Netflix Hystrix
作用:斷路器,保護系統,控制故障范圍。
說明:為了保證其高可用,單個服務通常會集群部署。由于網絡原因或者自身的原因,服務并不能保證100%可用,如果單個服務器出現問題,調用這個服務就會出現線程阻塞,此時若大量的請求涌入,Servlet容器的線程資源會被消耗完畢,導致服務癱瘓。服務于服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重后果,這就是服務器故障的“”“雪崩”效應。
Netflix Zuul
作用:api網關,路由,負載均衡等多種作用
說明:類似nginx,方向代理的功能,不過netflix自己增加了一些配合其他組件的特性。
在微服務架構中,后端服務往往不直接開發給調用端,而是通過一個api網關根據請求的url,路由到相應的服務。當添加API網關后,在第三方調用端和服務提供方之間就創建了一面墻,在這面墻直接與調用方通信進行權限控制,后將請求均衡分發給后臺服務端。
Spring Cloud Config
作用:配置管理
說明:Spring Cloud Config提供服務端和客戶端。服務器存儲后端的默認實現使用git,因此它輕松支持標簽的配置環境,可以訪問作用于管理內部的各種工具。這個是靜態的,得配合Spring Cloud Bus實現動態的配置更新。
6、Eureka和Zookeeper區別
eureka基于AP。
zookeeper基于CP。
由于作為注冊中心可用性的需求要高于一致性,所以eureka貌似要比zookeeper更合理一些。
7、搭建Spring Cloud項目
1、新建一個maven項目,項目名為demo-spring-cloud,此項目作為一個總項目,后面在此項目下新建五個子模塊。
demo-spring-cloud項目的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><groupId>com.nelson.org</groupId><artifactId>demo-spring-cloud</artifactId><version>1.0-SNAPSHOT</version><properties><jdk.version>1.8</jdk.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency> <!-- 進行SpringCloud依賴包的導入處理 --><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency> <!-- SpringCloud離不開SpringBoot,所以必須要配置此依賴包 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.31</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency></dependencies></dependencyManagement><build><finalName>demo-spring-cloud</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${jdk.version}</source><!-- 源代碼使用的開發版本 --><target>${jdk.version}</target><!-- 需要生成的目標class文件的編譯版本 --></configuration></plugin></plugins></build>
</project>
spingcloud中針對依賴包的版本并不像傳統項目一樣使用的是數字形式定義,反而是使用了一系列英國的地鐵或者城市名字來定義,springcloud使用了springboot,其中對于的版本如下
Release Train Boot Version
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
2、 新建一個子模塊demo-common,簡歷一個公共模塊(maven項目),這個模塊的主要功能是提供公共處理的工具類、實體、接口等。
pom文件如下,在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>demo-spring-cloud</artifactId><groupId>com.nelson.org</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>demo-common</artifactId>**<version>1.0.0</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>**
</project>
3、新建一個子模塊demo-provider-product,作為服務的提供者此模塊使用mybatis對數據庫進行操作,pom文件如下,在pom文件中引入了demo-common模塊,并為demo-provider-product模塊提供了一個版本號。
<?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>demo-spring-cloud</artifactId><groupId>com.nelson.org</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>demo-provider-product</artifactId><version>1.0.0</version><dependencies><dependency><groupId>com.nelson.org</groupId><artifactId>demo-common</artifactId><version>1.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>
4、建立一個子模塊demo-consumer作為服務的消費者
這個模塊作為服務的消費方,用于調用前面的demo-provider-product服務
pom文件如下,此模塊中也引入了demo-common模塊
<?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>demo-spring-cloud</artifactId><groupId>com.nelson.org</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>demo-consumer</artifactId><dependencies><dependency><groupId>com.nelson.org</groupId><artifactId>demo-common</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>
</project>
package com.nelson.org;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @auther 1301913120@qq.com* @create 2019-06-12 20:41* @todo*/
@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}
啟動demo-provider-product和demo-consumer調用測試。
總結
以上是生活随笔為你收集整理的菜鸟Spring Cloud入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Element-UI组件之表单Form
- 下一篇: 奈氏准则 香农定理