今天就跟大家聊聊有關Ribbon是否能被spring-cloud-loadbalancer替代,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
專注于為中小企業(yè)提供成都網(wǎng)站建設、網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)依蘭免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
早上刷圈看到 Spring Cloud Hoxton.M2 Released 的消息,隨手發(fā)布到了我的知識星球,過了會有個朋友過來如下問題。 抽取半天時間學習spring-cloud-loadbalancer 的源碼,整理出此文總結(jié) 
Spring Cloud Hoxton.M2 是第一個整合新的loadbalancer實現(xiàn)來替代Ribbon的版本
Spring Cloud Hoxton.M2 is the first release containing both blocking and non-blocking load balancer client implementations as an alternative to Netflix Ribbon which has entered maintenance mode.
spring-cloud-loadbalancer 的淵源
2017年spring 開始嘗試開發(fā)新的項目 spring-cloud-loadbalancer 替代ribbon,項目托管在 spring-cloud-incubator 孵化器 (多提一嘴,spring cloud alibaba 等頂級的項目大多從此孵化出來的,代表著 spring cloud 的發(fā)展方向)
經(jīng)過N個月的不維護,還以為spring 放棄此項目時,突然把此項目標記成歸檔遷移到spring-cloud-commons
發(fā)布2.2.0.M2 版本
這里基于 最新的hoxton.m2 版本才可以使用,所以要配置spring的代理maven庫
<dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>Hoxton.M2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencymanagement>
加入nacos-client ,使用 2.1.0版本,特別注意排除 ribbon依賴,不然loadbalancer 無效
<dependency> <groupid>com.alibaba.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid> <exclusions> <exclusion> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-ribbon</artifactid> </exclusion> </exclusions> </dependency>
加入 loadbalancer pom坐標
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-loadbalancer</artifactid> </dependency>
配置使用還是和 ribbon 一樣配置
@Configuration
public class LbConfiguration {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
@GetMapping("/demo")
public String doOtherStuff() {
return restTemplate.getForObject("http://big-provider-server/demo", String.class);
}
目前版本只提供了 BlockingLoadBalancerClient 的實現(xiàn), 注意看中文注釋
// 刪除只保留了核心代碼注意
public class BlockingLoadBalancerClient implements LoadBalancerClient {
@Override
public <t> T execute(String serviceId, LoadBalancerRequest<t> request)
throws IOException {
// 根據(jù) 服務名稱去查詢可用實例
ServiceInstance serviceInstance = choose(serviceId);
return execute(serviceId, serviceInstance, request);
}
@Override
public ServiceInstance choose(String serviceId) {
// 獲取負載均衡策略
ReactiveLoadBalancer<serviceinstance> loadBalancer = loadBalancerClientFactory
.getInstance(serviceId);
// 執(zhí)行負載均衡策略獲取可以實例
Response<serviceinstance> loadBalancerResponse = Mono.from(loadBalancer.choose())
.block();
return loadBalancerResponse.getServer();
}
}
目前只有一個RoundRobinLoadBalancer 輪詢選擇server的方式
public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer {
public Mono<response<serviceinstance>> choose(Request request) {
ServiceInstanceSupplier supplier = this.serviceInstanceSupplier.getIfAvailable();
return supplier.get().collectList().map(instances -> {
if (instances.isEmpty()) {
log.warn("No servers available for service: " + this.serviceId);
return new EmptyResponse();
}
// TODO: enforce order?
int pos = Math.abs(this.position.incrementAndGet());
ServiceInstance instance = instances.get(pos % instances.size());
return new DefaultResponse(instance);
});
}
}ribbon 提供7中默認的負載均衡策略,常見的常見都有覆蓋,一般我們都是使用 ZoneAvoidanceRule 復合判斷server所在區(qū)域的性能和server的可用性選擇server 
目前spring-cloud-loadbalancer 僅支持 重試操作的配置
ribbon 支持超時、懶加載處理、重試及其和 hystrix整合高級屬性等
看完上述內(nèi)容,你們對Ribbon是否能被spring-cloud-loadbalancer替代有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
分享標題:Ribbon是否能被spring-cloud-loadbalancer替代
文章網(wǎng)址:http://www.chinadenli.net/article22/gccecc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)頁設計公司、Google、網(wǎng)站導航、定制網(wǎng)站、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)