摘要:根據(jù)傳入的從中挑選一個對應(yīng)的。是負載均衡策略實現(xiàn),默認由生成,根據(jù)來執(zhí)行請求,調(diào)用。將轉(zhuǎn)換成通過注冊中心中各個服務(wù)節(jié)點的初始化流程返回了一個攔截器,作用主要是在客戶端發(fā)起請求時進行攔截,進而實現(xiàn)客戶端負載均衡功能。
@LoadBalanced
public interface ServiceInstanceChooser { // 根據(jù)傳入的serviceId從LoadBalancer中挑選一個對應(yīng)的ServiceInstance。 ServiceInstance choose(String serviceId); } public interface LoadBalancerClient extends ServiceInstanceChooser { // 邏輯同choose,即通過ILoadBalancer::chooseServer,然后使用返回的ServiceInstance調(diào)用下面execute方法。 // ILoadBalancer是負載均衡策略實現(xiàn),默認由RibbonClientConfiguration::ribbonLoadBalancer生成ZoneAwareLoadBalancer,初始化流程T execute(String serviceId, LoadBalancerRequest request) throws IOException; // 根據(jù)ServiceInstance來執(zhí)行請求,調(diào)用LoadBalancerRequest::apply。 T execute(String serviceId, ServiceInstance serviceInstance, LoadBalancerRequest request) throws IOException; // 將serviceId轉(zhuǎn)換成host:port(通過注冊中心中各個服務(wù)節(jié)點的metadata) URI reconstructURI(ServiceInstance instance, URI original); }
LoadBalancerAutoConfiguration.LoadBalancerInterceptorConfig
::ribbonInterceptor返回了一個攔截器,作用主要是在客戶端發(fā)起請求時進行攔截,進而實現(xiàn)客戶端負載均衡功能。
::restTemplateCustomizer會實例化RestTemplateCustomizer,其作用是設(shè)置::ribbonInterceptor返回的攔截器
LoadBalancerAutoConfiguration
::loadBalancedRestTemplateInitializer調(diào)用RestTemplateCustomizer::customize方法來給RestTemplate添加上LoadBalancerInterceptor攔截器。
public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { private LoadBalancerClient loadBalancer; private LoadBalancerRequestFactory requestFactory; ...... public ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = originalUri.getHost(); // 會調(diào)另一個execute方法,即LoadBalancerRequest::apply,而LoadBalancerRequest的實例是由LoadBalancerRequestFactory::createRequest生成的。 return this.loadBalancer.execute(serviceName, requestFactory.createRequest(request, body, execution)); } } public class LoadBalancerRequestFactory { ...... public LoadBalancerRequestcreateRequest(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) { return new LoadBalancerRequest () { @Override public ClientHttpResponse apply(final ServiceInstance instance) throws Exception { // ServiceRequestWrapper重寫了getURI(),即ServiceRequestWrapper::getURI調(diào)用了LoadBalancerClient::reconstructURI HttpRequest serviceRequest = new ServiceRequestWrapper(request, instance, loadBalancer); if (transformers != null) { for (LoadBalancerRequestTransformer transformer : transformers) { serviceRequest = transformer.transformRequest(serviceRequest, instance); } } // 這里的execution是InterceptingRequestExecution::execute,它會調(diào)用serviceRequest的HttpRequest::getURI,就是上面ServiceRequestWrapper重寫的getURI() return execution.execute(serviceRequest, body); } }; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68341.html
摘要:概要什么是實戰(zhàn)整合實現(xiàn)負載均衡是什么是一個客戶端負載均衡的組件什么是負載均衡負載均衡就是分發(fā)請求流量到不同的服務(wù)器目前的實現(xiàn)有軟件和硬件負載均衡分為兩種服務(wù)器端負載均衡如上圖所示服務(wù)器端負載均衡是對客戶透明的用戶請求到服務(wù)器真正的服務(wù)器是由 概要 什么是Spring Cloud Netflix Ribbon? 實戰(zhàn):整合Ribbon實現(xiàn)負載均衡 Spring Cloud Netfl...
摘要:本例中介紹如何使用來完成服務(wù)調(diào)用并實現(xiàn)負載均衡。即,對于注冊中心而言,生產(chǎn)者和調(diào)用者都是端。文件配置如下在文件中,我們將應(yīng)用命名為,端口為,表示注冊中心地址。 前言 Ribbon是Spring Cloud體系中完成負載均衡的重要組件。Spring Cloud體系中有兩種完成服務(wù)調(diào)用的組件,一種是Ribbon+RestTemplate,另一種Feign。Feign默認使用的也是Ribbo...
摘要:客戶端負載均衡器是一個客戶端負載均衡器,可以讓你對和客戶端的行為進行大量控制,已經(jīng)使用了,因此,如果你使用,此部分也適用。 客戶端負載均衡器:Ribbon Ribbon是一個客戶端負載均衡器,可以讓你對HTTP和TCP客戶端的行為進行大量控制,F(xiàn)eign已經(jīng)使用了Ribbon,因此,如果你使用@FeignClient,此部分也適用。 Ribbon中的一個核心概念是命名客戶端,每個負載均...
摘要:在服務(wù)架構(gòu)中,業(yè)務(wù)都會被拆分成一個獨立的服務(wù),服務(wù)與服務(wù)的通訊是基于的。配置文件如下在工程的啟動類中通過向服務(wù)中心注冊并且注冊了一個通過注冊表明,這個是負載均衡的。 轉(zhuǎn)載請標明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 在上一篇文章,講了服務(wù)的注冊和發(fā)現(xiàn)。在服務(wù)架構(gòu)中,業(yè)務(wù)都會被拆分成一個獨立的服務(wù),服務(wù)與服務(wù)的通訊是基于http re...
摘要:在服務(wù)注冊服務(wù)提供者這一篇可能學習了這么開發(fā)一個服務(wù)提供者,在生成上服務(wù)提供者通常是部署在內(nèi)網(wǎng)上,即是服務(wù)提供者所在的服務(wù)器是與互聯(lián)網(wǎng)完全隔離的。服務(wù)消費者本質(zhì)上也是一個。 在《服務(wù)注冊&服務(wù)提供者》這一篇可能學習了這么開發(fā)一個服務(wù)提供者,在生成上服務(wù)提供者通常是部署在內(nèi)網(wǎng)上,即是服務(wù)提供者所在的服務(wù)器是與互聯(lián)網(wǎng)完全隔離的。這篇說下服務(wù)發(fā)現(xiàn)(服務(wù)消費者),通常服務(wù)消費者是部署在與互聯(lián)網(wǎng)...
摘要:多層服務(wù)調(diào)用常見于微服務(wù)架構(gòu)中較底層的服務(wù)如果出現(xiàn)故障,會導致連鎖故障。 Spring Cloud 體驗 簡介 Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具,包括配置管理、服務(wù)發(fā)現(xiàn)、斷路器、路由、微代理、 事件總線、全局鎖、決策競選、分布式會話等等 基于Spring Boot,Spring Cloud將各公司成熟服務(wù)框架組合起來,通過Spring Boo...
閱讀 2013·2021-09-29 09:35
閱讀 1949·2019-08-30 14:15
閱讀 2973·2019-08-30 10:56
閱讀 955·2019-08-29 16:59
閱讀 571·2019-08-29 14:04
閱讀 1302·2019-08-29 12:30
閱讀 1020·2019-08-28 18:19
閱讀 510·2019-08-26 11:51