天天看點

編碼實作Spring Cloud微服務負載均衡調用(eureka、ribbon)

spring 封裝、揉和了一批開源項目,其中以netflix開源的為主,比如zuul、eureka、hystrix、robbin等;然後就有了現在的spring cloud微服務架構。這也充分展現了spring的揉合能力。

spring cloud通過封裝使這些項目融入spring的bean管理機制中,進而友善使用。這套微服務的核心功能還是使用這些項目的。

由本篇的标題可以想到本篇就是不使用spring的注解和配置來使用這套微服務。看看現在網上關于spring cloud的示例,千篇一律那幾行注解和代碼。确實友善了使用。

本篇主要從微服務的調用端來講解的,主要涉及如下幾點:

全局配置,包括服務注冊中心配置;

初始化服務發現用戶端;

執行個體化負載均衡調用實作類;

執行個體化某個具體調用requset,再對根據服務均衡器選擇的服務提供者進行調用;

如果你使用過dubbo的泛化調用,會發現很相似;難怪有人專門對比使用spring cloud和dubbo來實作微服務。

如下為編碼實作的例子,很多說明在注解中;

zuul實作了網關架構,主要邏輯為執行pre、route、post三種類型的filter,且可以動态加載filter,使用方可以實作自己的filter。

spring cloud封裝實作的route類型filter,預設使用了ribbon對eureka 服務發現的負載均衡client。

spring cloud在結合了ribbon的負載均衡實作中,封裝增加了httpclient和okhttp兩種http請求端實作。

spring cloud中還內建了feign,友善的使用http請求調用遠端服務,且可以靈活的使用和自定義各種編解碼器實作入參和出差的序列化和反序列化。

做上面的代碼示例的想法來源于現在負責的網關項目中一些需求想法,之前網關隻适配了dubbo類型的rpc服務叢集,目前一些新項目開始試行spring cloud架構,是以網關在做對應的适配。圖例如下:

編碼實作Spring Cloud微服務負載均衡調用(eureka、ribbon)