您好,登錄后才能下訂單哦!
本篇內容介紹了“什么是SpringCloud客戶端負載均衡”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
(Spring Cloud Netflix) -->大量使用了Netflix公司的開源項目
(Spring Cloud Alibaba)-->大量使用了Alibaba公司的開源項目
Spring Cloud Ribbon是基于Netflix Ribbon實現的一套客戶端負載均衡器;
我們通常說的負載均衡是指將一個請求均勻地分攤到不同的節點單元上執行,負載均衡分為硬件負載均衡和軟件負載均衡:
硬件負載均衡:比如 F5、深信服、Array 等;
軟件負載均衡:比如 Nginx、LVS、HAProxy 等;(是一個服務器實現的)
Ribbon是Netflix公司發布的開源項目(組件、框架、jar包),主要功能是提供客戶端的軟件負載均衡算法,它會從eureka中獲取一個可用的服務端清單,通過心跳檢測來剔除故障的服務端節點以保證清單中都是可以正常訪問的服務端節點。
當客戶端發送請求,則ribbon負載均衡器按某種算法(比如輪詢、權重、 最小連接數等)從維護的可用服務端清單中取出一臺服務端的地址,然后進行請求;
Ribbon非常簡單,可以說就是一個jar包,這個jar包實現了負載均衡算法,Spring Cloud 對 Ribbon 做了二次封裝,可以讓我們使用 RestTemplate 的服務請求,自動轉換成客戶端負載均衡的服務調用。
Ribbon 支持多種負載均衡算法,還支持自定義的負載均衡算法。
1、首先加入ribbon的依賴,但是eureka已經依賴了ribbon,所以這里不需要再引用ribbon的依賴;
2、要使用ribbon,只需要一個注解:
@Bean @LoadBalanced public RestTemplate restTemplate(){ RestTemplate restTemplate = new RestTemplate(); return restTemplate; }
在RestTemplate上面加入@LoadBalanced注解,這樣就可以實現RestTemplate 在調用時自動負載均衡;
我們這里現在啟動了eureka集群(3個eureka) 和服務提供者集群(2個service-goods) 和一個服務調用者(service-portal)
#告訴服務端,服務實例的唯一ID
eureka.instance.instance-id=34-sprinGCloud-service-portal
Ribbon 的負載均衡策略是由 IRule 接口定義, 該接口由如下實現:
在jar包:com.netflix.ribbon#ribbon-loadbalancer中;
要使用ribbon實現負載均衡,在Spring 的配置類里面把對應的負載均衡接口實現類作為一個Bean配置一下就行了;
如果要切換負載均衡策略:
@Bean public IRule iRule(){ return new RoundRobinRule(); }
如果我們沒有指定負載均衡策略,ribbon默認的負載均衡是ZoneAvoidanceRule;(新版本,G版本)
Feign 是 Netflix 公司開發的一個聲明式的 REST 調用客戶端; (調用遠程的restful風格的http接口的一個組件)
調用組件其實很多,比如:
1、Httpclient(apache)
2、Httpurlconnection (jdk)
3、restTemplate(spring)
4、OkHttp(android)
5、Feign (Netflix) --> 實現非常優雅
Spring Cloud Feign 對 Ribbon 負載均衡進行了簡化,在其基礎上進行了進一步的封裝,在配置上大大簡化了開發工作,它是一種聲明式的調用方式,它的使用方法是定義一個接口,然后在接口上添加注解,使其支持了Spring MVC標準注解和HttpMessageConverters,Feign可以與Eureka和Ribbon組合使用以支持負載均衡。
Feign旨在簡化微服務消費方(調用者,客戶端)代碼的開發,前面在使用Ribbon+RestTemplate進行服務調用時,利用RestTemplate對http請求的封裝處理,形成了一套模版化的調用方式,但是在實際開發中,由于服務提供者提供的接口非常多,一個接口也可能會被多處調用,Feign在Ribbon+RestTemplate的基礎上做了進一步封裝,在Feign封裝之后,我們只需創建一個接口并使用注解的方式來配置,即可完成對服務提供方的接口綁定,簡化了使用Ribbon + RestTemplate的調用,自動封裝服務調用客戶端,減少代碼開發量;
使用 Feign 實現消費者,我們通過下面步驟進行:
第一步:創建普通 Spring Boot 工程
把接口放在通用的接口層、常量類、model的項目中
第二步:添加依賴
要 添 加 的 依 賴 主 要 是
spring-cloud-starter-netflix-eureka-client 和 spring-cloud-starter-feign,如下:
<!-- spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
第三步:聲明服務
定義一個 GoodsRemoteClient 接口,通過@FeignClient 注解來指定服務名稱,進而綁定服務,然后再通過 SpringMVC 中提供的注解來綁定服務提供者提供的接口, 如下:
@FeignClient("34-SPRINGCLOUD-SERVICE-GOODS") public interface GoodsService { @RequestMapping("/service/goods") public String goods(); }
這相當于綁定了一個名叫34-SPRINGCLOUD-SERVICE-GOODS (這里34-SPRINGCLOUD-SERVICE-GOODS大小寫34-sprinGCloud-service-goods都可以 ) 的服務提供者提供的/service/goods 接口;
第四步:添加注解
在項目入口類上添加@EnableFeignClients 注解表示開啟 Spring Cloud Feign的支持功能;
第五步:使用 Controller 中調用服務
接著來創建一個 Controller 來調用上面的服務,如下:
public class GoodsController { @Autowired private GoodsService goodsService; /** * 使用feign進行調用 * * @return */ @RequestMapping("/cloud/goodsFeign") public ResultObject goodsFeign() { //調用遠程的一個controller, restful的調用 return goodsService.goods(); } }
第六步:屬性配置
在 application.properties 中指定服務注冊中心、端口號等信息,如下:
server.port=8090
#打開所有的web訪問端點
management.endpoints.web.exposure.include=*
#此實例注冊到eureka服務端的name
spring.application.name=34-sprinGCloud-service-feign
#不注冊自己,我是一個消費者,別人如果不調用我的話,我就不用注冊
eureka.client.register-with-eureka=false
#每間隔2s,向服務端發送一次心跳,證明自己依然"存活"
eureka.instance.lease-renewal-interval-in-seconds=2
#告訴服務端,如果我10s之內沒有給你發心跳,就代表我故障了,將我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=10
#告訴服務端,服務實例以IP作為鏈接,而不是取機器名
eureka.instance.prefer-ip-address=true
#告訴服務端,服務實例的唯一ID
eureka.instance.instance-id=34-sprinGCloud-service-feign
#eureka注冊中心的連接地址
#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka
#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka
eureka.client.service-url.defaultZone=http://192.168.10.128:8761/eureka,http://192.168.10.128:8762/eureka,http://192.168.10.128:8763/eureka
第七步:測試
依次啟動注冊中心、服務提供者和 feign 實現服務消費者,然后訪問如下地址:
http://localhost:8090/cloud/goodsFeign
我們知道,Spring Cloud 提供了 Ribbon 來實現負載均衡,使用 Ribbo 直接注入一個 RestTemplate 對象即可,RestTemplate 已經做好了負載均衡的配置;
在 Spring Cloud 下,使用 Feign 也是直接可以實現負載均衡的,定義一個有@FeignClient 注解的接口,然后使用@RequestMapping 注解到方法上映射遠程的 REST 服務,此方法也是做好負載均衡配置的;
通過feign只需要定義服務綁定接口且以聲明式的方法,優雅而簡單的實現了服務調用;
“什么是SpringCloud客戶端負載均衡”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。