成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Spring Cloud負載均衡及遠程調用實現(xiàn)詳解

瀏覽:166日期:2023-08-20 13:36:42

負載均衡

使用微服務后,為了能夠承擔高并發(fā)的壓力,同一個服務可能會啟動多個實例。這時候消費者就需要負載均衡,把請求分散到各個實例。負載均衡主要有兩種設計:

服務端負載均衡客戶端負載均衡

對于傳統(tǒng)的分布式服務來說,大多使用服務端負載均衡。一般會使用Nginx或者ELB等工具作為負載均衡器,如下圖:

Spring Cloud負載均衡及遠程調用實現(xiàn)詳解

傳統(tǒng)負載均衡

而在Spring Cloud中,使用的是「客戶端負載均衡」的方式,使用「Ribbon」組件來實現(xiàn)客戶端的負載均衡。只要引入了微服務注冊中心依賴,就會自動引入Ribbon依賴。客戶端負載均衡原理如下圖:

Spring Cloud負載均衡及遠程調用實現(xiàn)詳解

客戶端負載均衡

Ribbon的原理

Ribbon利用了RestTemplate的攔截器(接口是ClientHttpRequestInterceptor)機制,在攔截器中實現(xiàn)的負載均衡。負載均衡的基本實現(xiàn)就是利用從「服務注冊中心」獲取可用的服務地址列表,然后通過一定算法負載,決定使用哪一個服務地址來進行HTTP調用。

詳情可以查看LoadBalancerInterceptor這個類,位于org.springframework.cloud.client.loadbalancer包下。

使用Ribbon

首先定義一下生產(chǎn)者「service-user」,我這里使用容器啟動了多個生產(chǎn)者實例,每個實例具有不同的id,我的示例代碼里面啟動了兩個實例:

service-user-1service-user-2

代碼:

@RestController@RequestMappingpublic class HelloController { @Value('${spring.cloud.consul.discovery.instanceId}') private String instanceId; @GetMapping('hello') public String hello() { return String.format('hello, this is %s', instanceId); }}

然后對于消費者「service-order」,可以使用Java聲明式注解的方式來使用Ribbon,只需要在消費者給RestTemplate類型的Bean配上一個@LoadBalanced就可以了。然后再配置一下負載均衡策略:

@Configurationpublic class RibbonConfig { @Bean @LoadBalanced public RestTemplate ribbonRestTemplate(){ return new RestTemplate(); } @Bean public IRule ribbonRule() { return new RandomRule(); // 隨機負載均衡 }}

然后就可以直接使用自動注入的RestTemplate類型的Bean了:

@RestController@RequestMappingpublic class HelloController { @Autowired RestTemplate restTemplate; @GetMapping('/ribbon/service-user') public String ribbonService(){ return restTemplate.getForObject('http://service-user/hello', String.class); }}

這個時候訪問消費者的/ribbon/service-user,刷新幾次,就會看到下面兩個隨機的響應:

hello, this is service-user-2hello, this is service-user-1

負載均衡策略

查看IRule接口的實現(xiàn)類,可以看到Ribbon的所有負載均衡策略,查看各實現(xiàn)類頂部的注釋可以看到它的具體策略:

Spring Cloud負載均衡及遠程調用實現(xiàn)詳解

負載均衡器

RandomRule:隨機選擇; RoundRobinRule:輪詢; WeightedResponseTimeRule:根據(jù)每個服務的響應時間設置權重,響應時間越長,所占權重越少; AvailabilityFilteringRule:過濾掉那些因為一直連接失敗的被標記為circuit tripped的后端server,并過濾掉那些高并發(fā)的的后端server(active connections 超過配置的閾值); ZoneAvoidanceRule:使用CompositePredicate根據(jù)區(qū)域和可用性過濾服務器的規(guī)則; BestAvailableRule:選擇一個最小的并發(fā)請求的server; RetryRule:在現(xiàn)有的策略基礎上,添加重試機制,因為IRule支持「級聯(lián)」。

遠程調用

Spring Cloud提供了OpenFeign組件(以前叫Feign)來進行遠程的HTTP調用。它是對RestTemplate的一個封裝。

Feign是一個聲明式Web Service客戶端。使用Feign能讓編寫Web Service客戶端更加簡單。Spring Cloud對Feign進行了封裝,使其支持了Spring MVC標準注解和HttpMessageConverters。Feign可以與微服務注冊中心和Ribbon組合使用以支持負載均衡。

使用OpenFeign

第一步,引入依賴:

implementation ’org.springframework.cloud:spring-cloud-starter-openfeign’

第二步,啟動配置,在啟動類上添加@EnableFeignClients注解:

@SpringBootApplicationbr/>@EnableFeignClientspublic class ServiceOrderApplication {public static void main(String[] args) { SpringApplication.run(ServiceOrderApplication.class, args);}}

第三步:聲明調用接口,我這里案例是service-order調用service-user的/hello接口,這里的注解就跟Spring MVC的注解一致:

注意Feign在做POST請求的時候有一個小坑,詳情參考:SpringCloud Feign Post表單請求。

@FeignClient('service-user')public interface UserClient { @GetMapping('hello') String getUserHello();}

第四步:使用,注解使用@Autowired注解注入就可以了:

@RestController@RequestMappingpublic class HelloController { @Autowired UserClient userClient; @GetMapping('hello') public String hello() { return 'hello, this is order service'; } @GetMapping('userHello') public String user() { return userClient.getUserHello() + ', this is order-service'; }}

是不是看起來非常簡單?

OpenFeign集成Ribbon

前面我們提到,OpenFeign底層是對RestTemplate的一個封裝,而Ribbon是通過給RestTemplate添加過濾器來實現(xiàn)的,所以OpenFeign天生就自動集成了Ribbon,我們不需要任何額外的配置。

在上述代碼中,啟動后,可以訪問service-order的/userHello端口,不斷刷新,發(fā)現(xiàn)已經(jīng)實現(xiàn)了負載均衡。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久综合狠狠综合久久综合88 | 亚洲永久精品大片| 国产福利一区在线| 在线一区二区三区四区| 亚洲美女精品一区| 精品91视频| 国产天堂亚洲国产碰碰| 99国内精品久久| 精品蜜桃在线看| 国产一区啦啦啦在线观看| 欧美日韩一区二区三区四区| 免费成人在线视频观看| 久久一二三区| 日韩高清一区二区| 鲁鲁狠狠狠7777一区二区| 亚洲图片欧美视频| 亚洲一区日韩在线| 亚洲电影第三页| 久久久青草婷婷精品综合日韩| 亚洲一区二区三区视频在线 | 欧美在线不卡| 久久精品视频一区二区| 午夜精品视频| 亚洲视频一区二区在线观看| 91久久亚洲| 亚洲高清久久久| 色婷婷激情综合| 久久精品久久精品| 欧美人xxxx| 国产一区二区三区黄视频| 91精品国产高清一区二区三区| 国产69精品久久久久毛片| 精品区一区二区| 欧美精品国产| 亚洲男人都懂的| 国产欧美日韩一区二区三区| 亚洲图片欧美综合| 在线免费不卡视频| 国产精品资源在线观看| 欧美不卡激情三级在线观看| 91蜜桃在线观看| 亚洲蜜桃精久久久久久久| 麻豆av福利av久久av| 麻豆国产精品视频| 欧美三级电影在线观看| 成人精品视频一区二区三区| 久久先锋资源网| 一区在线播放| 国产精品久久毛片av大全日韩| 国产91富婆露脸刺激对白| 成人app软件下载大全免费| 久久久www免费人成精品| 欧美精品观看| 一区二区三区四区蜜桃| 蜜桃久久av| 国产精品自产自拍| 欧美韩日一区二区三区四区| 99精品欧美| 免费高清在线一区| 精品污污网站免费看| 成人免费毛片a| 自拍偷自拍亚洲精品播放| 久久久精品动漫| 国产成人av资源| 亚洲三级免费电影| 91福利国产精品| 成人白浆超碰人人人人| 中文字幕一区二区不卡| 久久成人一区| 国产东北露脸精品视频| 中文字幕欧美日韩一区| 久久一区二区三区四区五区 | 在线免费观看欧美| 久久电影网电视剧免费观看| 精品美女被调教视频大全网站| 亚洲视频综合| 久久国产三级精品| 国产女主播一区| 色乱码一区二区三区88| 99re66热这里只有精品3直播| 亚洲人成伊人成综合网小说| 欧洲精品在线观看| 99国产精品国产精品久久| 亚洲黄色免费电影| 9191久久久久久久久久久| 欧美激情91| 日韩av一级片| 国产亚洲1区2区3区| 美女视频一区免费观看| 波多野结衣中文字幕一区 | 亚洲永久免费精品| 国产超碰在线一区| 亚洲激情第一区| 精品国产乱码久久| 亚洲专区在线| av一区二区三区四区| 亚洲国产精品久久一线不卡| 日韩欧美一区中文| 亚洲一区二区三区欧美| 成人免费毛片高清视频| 亚洲1区2区3区视频| 26uuu亚洲婷婷狠狠天堂| 免费h精品视频在线播放| eeuss鲁片一区二区三区| 日韩中文字幕麻豆| 国产色婷婷亚洲99精品小说| 久久婷婷激情| 欧美99久久| 美女视频黄久久| 综合激情成人伊人| 欧美xxxx老人做受| 久久综合一区二区三区| 午夜精品婷婷| 久久99国产精品久久99果冻传媒| 中日韩免费视频中文字幕| 欧美日韩一二三区| 在线亚洲精品| 91免费国产视频网站| 久久不见久久见免费视频7| 亚洲乱码国产乱码精品精可以看| 亚洲精品一线二线三线| 欧美婷婷六月丁香综合色| 在线亚洲观看| 欧美三级网页| 国产精品一区2区| 亚洲国产成人tv| 国产精品女上位| 日韩女优制服丝袜电影| 色哟哟一区二区| 亚洲久久一区| 91在线丨porny丨国产| 久久福利视频一区二区| 亚洲自拍与偷拍| 中文字幕乱码久久午夜不卡 | xfplay精品久久| 欧美日韩日本视频| 乱码第一页成人| 亚洲精品一区二| 色综合天天综合在线视频| 国产一区二区三区在线观看免费 | 91免费版在线| 成人国产精品免费| 国产精品99久久久久久久vr| 奇米影视一区二区三区| 尤物在线观看一区| 一区精品在线播放| 国产日韩欧美综合在线| 日韩女优制服丝袜电影| 欧美日韩国产一级二级| 日本韩国精品一区二区在线观看| 亚洲制服av| 国产精品久久久久久久免费软件 | 欧美日韩精品一区二区三区| 久久久久久久欧美精品| 亚洲影音一区| 国产亚洲毛片在线| 亚洲三级视频| 在线看片成人| 在线欧美不卡| 在线观看亚洲| 亚洲黑丝一区二区| 欧美日韩国产三区| 色综合婷婷久久| 97久久超碰国产精品| 国产成人av电影在线| 国产成人亚洲综合a∨婷婷图片| 久久99久久久久久久久久久| 蜜臀99久久精品久久久久久软件| 亚洲成人av中文| 亚洲电影第三页| 午夜视频久久久久久| 亚洲第四色夜色| 亚洲在线一区二区三区| 一区二区在线免费观看| 亚洲精品日产精品乱码不卡| 亚洲精品视频一区二区| 亚洲精品成人天堂一二三| 亚洲黄色性网站| 亚洲国产一区二区a毛片| 亚洲国产欧美另类丝袜| 亚洲成av人片在线观看无码| 日日欢夜夜爽一区| 免费一级片91| 精品一区二区三区欧美| 国内精品视频666| 国产成人亚洲综合a∨婷婷 | 欧美婷婷六月丁香综合色| 欧美另类videos死尸| 在线电影欧美成精品| 欧美一级艳片视频免费观看| 日韩三级视频在线观看| 久久综合五月天婷婷伊人| 久久婷婷一区二区三区| 亚洲国产精品成人综合色在线婷婷| 中文字幕国产精品一区二区| 中文字幕亚洲一区二区va在线| 亚洲精品国产无套在线观| 亚洲v中文字幕| 精品亚洲国内自在自线福利| 国产成人av一区|