一步一步搭建springCloud

1、spring cloud簡介web

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用Spring Boot的開發風格作到一鍵啓動和部署。Spring Cloud並無重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,經過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。spring

2、建立服務註冊中心瀏覽器

咱們須要用的的組件上Spring Cloud Netflix的Eureka ,eureka是一個服務註冊和發現模塊。springboot

一、建立一個web-app的maven工程。此處命名爲:springcloud網絡

二、在該工程下建立module。架構

選擇springboot的快速建立。

勾上Eureka Server。以便自動導入包

三、能夠檢查一下pom文件,這裏的依賴以下:

四、在application中加入註解@EnableEurekaServer,申明此處爲服務註冊中心。

五、yml中的加入以下配置:registerWithEureka 和 fetchRegistry 設置爲false,代表本身屬於服務中心主體

六、啓動服務,登錄瀏覽器查看。 http://localhost:8761/

紅框內爲已經註冊的服務。這裏咱們只有服務中心,沒有寫生產者,因此紅框中的內容應該是空。app

3、建立生產者

建立的過程如server同樣便可。負載均衡

一、建立完成以後檢查一下pom文件,這裏提供依賴以下:框架

二、在application中加入註解@EnableEurekaClient,代表本身屬於一個生產者。

這裏爲了方便測試,直接使用@RestController獲取返回值。maven

三、yml配置

端口不能與上面的相同。這裏的服務name:service-hi 能夠根據本身狀況定義。

四、運行服務,登錄環境 http://localhost:8765/hi?name=fys

能夠看到以下信息。這裏用postman進行測試:

在8761這個端口中,也能看到,該信息已經在服務中心進行了註冊。名字爲咱們yml中進行配置的名字。

3、建立消費者

1.1 方式一:服務消費者(rest+ribbon) 一、建立消費者modul,流程如上述工程建立流程。

二、引入pom依賴

斷路器依賴在此章節中能夠不須要引入。

三、yml配置

在工程的配置文件指定服務的註冊中心地址爲http://localhost:8761/eureka/ 。

四、application中加入註解:@EnableDiscoveryClient而且加入restTemplate以消費相關的服務。

五、建立service和controller。

這裏利用字符串進行傳輸。固然restTemplate也是能夠以對象進行傳輸的。

例如:

service-hi中的返回以下:

調用界面以下。

能夠看到,都是能成功獲取到相關的返回內容。這裏用object的封裝是爲了方法的通用性。(這裏key值若是爲數字,只測試過字符串的數字,會引發報錯。有興趣的能夠進一步研究)。

測試結果以下:

六、增長斷路器

在微服務架構中,根據業務來拆分紅一個個的服務,服務與服務之間能夠相互調用(RPC),在Spring Cloud能夠用RestTemplate+Ribbon和Feign來調用。爲了保證其高可用,單個服務一般會集羣部署。因爲網絡緣由或者自身的緣由,服務並不能保證100%可用,若是單個服務出現問題,調用這個服務就會出現線程阻塞,此時如有大量的請求涌入,Servlet容器的線程資源會被消耗完畢,致使服務癱瘓。服務與服務之間的依賴性,故障會傳播,會對整個微服務系統形成災難性的嚴重後果,這就是服務故障的「雪崩」效應。爲了解決這個問題,業界提出了斷路器模型。

Netflix開源了Hystrix組件,實現了斷路器模式,SpringCloud對這一組件進行了整合。

在微服務架構中,一個請求須要調用多個服務是很是常見的,以下圖:

較底層的服務若是出現故障,會致使連鎖故障。當對特定的服務的調用的不可用達到一個閥值(Hystric 是5秒20次) 斷路器將會被打開。

斷路打開後,可用避免連鎖故障,fallback方法能夠直接返回一個固定值。

首先。須要引入斷路器的pom依賴:

在application中增長@EnableHystrix註解表示開啓斷路器

在上一小節基礎上增長斷路器所需的fallback方法:

代碼以下:

完成上述工做後,將service-hi服務關閉,調用service-ribbon 的hi方法。能夠看到hiError的輸出結果。

更多內容可關注主頁
相關文章
相關標籤/搜索