1、Spring Cloud介紹
Spring Cloud家族有許多成員:
Spring Cloud Config - 配置管理工具包,集中化管理集群配置,目前支持本地存儲、Git 以及 Subversion;
Spring Cloud Bus - 事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署;
Spring Cloud Sleuth - 日志收集工具包,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作,為 SpringCloud 應用實現了一種分布式追蹤解決方案;
Spring Cloud Stream - Spring 數據流操作開發包,封裝了與 Redis、Rabbit、Kafka 等發送接收消息;
Spring Cloud OAuth2 - 基于 Spring Security 和 OAuth2 的安全工具包,為你的應用程序添加安全控制;
Eureka,服務注冊和發現,它提供了一個服務注冊中心、服務發現的客戶端,還有一個方便的查看所有注冊的服務的界面;
Zuul,網關,所有的客戶端請求通過這個網關訪問后臺的服務;
Ribbon,即負載均衡;
Feign,服務客戶端,服務之間如果需要相互訪問,可以使用RestTemplate,也可以使用Feign客戶端訪問,它默認會使用Ribbon來實現負載均衡;
Hystrix,監控和斷路器;
......
在當前文章中不會對這些組件的單個使用作很詳細的介紹,這些資料網上都可以找到,讀者可以根據自己的需要去網上查詢,這里只是演示如何將其中一些常用的組件組合起來,搭建起一個可以運行的Spring Cloud應用架構。
Spring Cloud的有一些組件并不是都是完美的,有一些國產組件比它做得更好、更符合國人的使用習慣,如阿里用于微服務治理的Sentinel比Hystrix更好用(基于Sentinel的高可用限流系統設計及實現完整版)、推程的Apollo比Spring Cloud Config更適合作配置中心、Skywalking的無侵入式調用鏈監控比Spring Cloud Sleuth更靈活更方便集成等等,可以根據自己的實際情況選擇最合適的。
2、示例架構介紹
當前的示例應用中,不會把所有的組件都用完,只是揀選一些常用幾個組件作為示例演示,其中Zuul with Ribbon作為網關、Eureka作為注冊與發現中心、Feign為遠程調用組件、
spring-cloud-config-serverw作為配置中心并以Git作為配置存儲中心,并且編寫了兩個基于Spring Boot的示例應用Application-1和application-2用于演示,以下是本次示例的架構圖:
當前示例的所有代碼都放在了碼云上面:
https://gitee.com/laofeng/spring-cloud,讀者可以自己下載下來自己嘗試。
3、項目搭建及運行
1、config-service本地的Git緩存目錄默認為
/data/spring-cloud-config/repo,如果該目錄不存在則需要建立該目錄;config-service是從git中去拉取配置的,如果沒有現成的則需要先搭建一個gitlab,我建意通過Docker搭建,比較方便,以下是一個操作命令:
Docker安裝Gitlab
1)拉取鏡像:
docker pull gitlab/gitlab-ce
2)啟動:
docker run -d -p 443:443 -p 8881:80 -p 222:22 --name gitlab --restart always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
3)通過admin/admin登陸后,再創建用戶test_user并設置密碼test_user,再通過test_user登陸創建名為spring-cloud-config的項目,再把當前目錄spring-cloud-config中的內容復制過去并提交到Git中。
2、將commons工程安裝到本地maven倉庫中:mvn source:jar install ;
3、項目啟動順序:eureka-service、 config-service、gateway-service、application-1、application-2;
4、通過Eureka查過各服務及應用的啟動情況,訪問URL:http://127.0.0.1:8761/ ;
5、驗證:
? 訪問application-1提供的接口:
? http://127.0.0.1:20250/test/getARandomValue 該接口實際會訪問application-2提供的接口
? http://127.0.0.1:20250/test/getValueOfKey1
? 訪問application-2提供的接口:
http://127.0.0.1:20260/test/getARandomValue
? 訪問網關接口:
? http://127.0.0.1:8762/api/test/getValueOfKey1
? http://127.0.0.1:8762/api/test/getARandomValue
? 如果以上都可以正常訪問,則說明應用啟動成功。
今天就到此為止,后面會把這幾個應用如何搭建的步驟分為不同的文章寫出來。