spring微服務實戰---zuul筆記

服務網關
服務客戶端和被調用服務之間的中介,有了服務網關,服務客戶端永遠不會直接調用單個服務的url,而是將所有調用都放到服務網關之上。
作用:路由(靜態和動態)、驗證和授權、度量數據收集和日誌記錄

zuul
一個服務網關,非常容易通過spring cloud 註解 進行創建和使用。

zuul使用需要完成的3件事:
(1)建立一個zuul spring boot項目,並配置合適的maven依賴。
(2)使用spring cloud 註解 修飾這個spring boot項目,將其聲明爲zuul服務
(3)配置 zuul 以便 eureka 進行通信(可選)

依賴:

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-zuul</artifactId>
	</dependency>

註解:
@EnableZuulProxy //加在啓動引導類上,使服務成爲一個Zuul服務器
@EnableZuulServer //該註解將創造一個zuul服務器,它不會加載任何zuul反向代理過濾器,也不會使用eureka進行服務發現

反向代理:
一箇中間服務器,它位於嘗試訪問資源的客戶端和資源本身之間。客戶端甚至不知道它正與代理之外的服務器進行通信。反向代理負責捕獲客戶端的請求,然後代表客戶端調用遠程資源。
zuul的核心是一個反向代理。

zuul路由映射機制:
通過(eureka)服務發現自動映射路由
無需配置,zuul根據服務ID自動路由請求(向eureka)(如果服務實例沒有在運行,zuul將不會公開該服務的路由)
通過(eureka)服務發現手動映射路由
可自定義路由映射,而不單純依賴eureka服務ID創建的自動路由(不管服務實例是否在運行,zuul仍會公開路由,如果調用不存的服務路由,則報500)
通過靜態URL手動映射路由
zuul可以路由那些不受eureka管理的服務

如何禁止zuul自動路由:

zuul:
	ignored-services: 'organizationservice'				// ignored-services參數可禁止自動路由,若要禁止所有自動路由,可將值設爲*
	prefix: /api										// 所有已定義的服務都將添加前綴/api
	routes:
		organizationservice: /organization/**
		

/api作用:api路由 和 內容路由 ??

靜態路由設置方法:

zuul:
	routes:
		xxxxxx:											// zuul用於在內部識別服務的關鍵字
		path: /xxxxxx/**								// 靜態路由
		url: http://ip:port								// 已建立服務的靜態實例,將被直接調用,而不是通過eureka調用

zuul使用hystrix和ribbon,來幫助防止長時間運行的服務調用影響服務網關的性能,默認情況下,對於任何需要1s的時間(hystrix默認值)來處理請求的調用,zuul將終止報500.
參數:hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 2500 // 超時設置爲2.5s
如果需要爲特定服務設置hystrix超時,可以將需要被覆蓋超時的服務的eureka服務id 替換 上述參數中的 default
ribbon同樣有超時設置。ps:spring微服務實戰144頁

zuul 核心:過濾器 // 相當於servlet和aop
前置過濾器
在請求被髮送到目的地之前被調用 // 主要用於驗證請求合法性
後置過濾器
在請求發送到目的地,且響應回給客戶端後,被調用 // 主要用於記錄從目標服務返回的響應、處理錯誤、審覈敏感信息響應
路由過濾器
在發送給目的地前被攔截調用 // 可將服務在兩個新老版本間進行路由,能夠讓少量用戶體驗新功能
// 不會執行http重定向,而是會終止傳入的http請求,然後代表原始調用值調用路由

UserContextFilter 類是一個自定義的http servlet過濾器,它將關聯ID映射到UserContext類。

/* 點滴積累 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章