接著執(zhí)行完畢getServer這個(gè)方法后,我們發(fā)現(xiàn),只有一個(gè)服務(wù)實(shí)例了為8090 。第二次調(diào)試代碼后發(fā)現(xiàn)獲取的是8091.多次調(diào)試后發(fā)現(xiàn)是8090和8091是輪詢出現(xiàn)的,
也就是說getServer這個(gè)方法給我們實(shí)現(xiàn)了負(fù)載均衡 。看源代碼知道,如果未設(shè)置負(fù)載均衡參數(shù),就使用default 。否則就根據(jù)配置的參數(shù)選擇服務(wù) 。
protected Server getServer(ILoadBalancer loadBalancer, Object hint) { if (loadBalancer == null) {return null; } // Use 'default' on a null hint, or just pass it on? return loadBalancer.chooseServer(hint != null ? hint : "default");}具體的實(shí)現(xiàn)的負(fù)載均衡算法,本文不做討論 。
4.負(fù)載均衡代碼驗(yàn)證演示通過上述源碼分析,我們發(fā)現(xiàn)如果我們開啟了負(fù)載均衡,但是沒有配置負(fù)載均衡參數(shù),則會(huì)采用默認(rèn)的配置,也就是輪詢算法來實(shí)現(xiàn)負(fù)載均衡 。
通過上述的debug閱讀,我們參照getServer這個(gè)方法來寫代碼測試下負(fù)載均衡
@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping(value = "https://www.520longzhigu.com/shenghuo/order/{orderId}")public Order queryOrderById(@PathVariable("orderId") String orderId) { String serviceId = "hutao-microservice-item"; for(int i = 0 ; i < 10 ; i++) {ServiceInstance choose = loadBalancerClient.choose(serviceId);System.out.println(choose); } //List<ServiceInstance> instances = discoveryClient.getInstances(serviceId); //ServiceInstance serviceInstance = instances.get(0); //String url = serviceInstance.getHost() + ":" + serviceInstance.getPort(); //Items items = restTemplate.getForObject("http://" + serviceId + "/itemservice/item/1" , Items.class); //System.out.println(items); return null;}5.負(fù)載均衡配置在我們之前調(diào)試代碼的時(shí)候我們發(fā)現(xiàn)源碼中定義了IRule.choose(Object objet)這個(gè)接口,并且如下幾個(gè)實(shí)現(xiàn) 。
各個(gè)實(shí)現(xiàn)如下所示 。
如果我們不想要默認(rèn)的輪詢機(jī)制,我們可以采用如上實(shí)現(xiàn)中的任何一種
比如,我們設(shè)置為隨機(jī)策略 。
- hutao-microservice-item是我們需要對(duì)某個(gè)服務(wù)設(shè)定
- NFLoadBalancerRuleClassName是我們的策略(也就是實(shí)現(xiàn)類的路徑)
hutao-microservice-item:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule重啟服務(wù)后,再看我們的負(fù)載均衡,是隨機(jī)的,而不是輪詢的 。6.總結(jié)
- 注冊多個(gè)服務(wù):將項(xiàng)目部署在不同的服務(wù)器,或者同一個(gè)服務(wù)器不同端口號(hào),然后注冊到注冊中心的服務(wù)ID(serviceId)保持一致即可;
- 負(fù)載均衡實(shí)現(xiàn):通過對(duì)RestTemplate添加注解@LoadBalanced,使用代理模式,攔截RestTemplate請求時(shí),訪問指定的負(fù)載服務(wù),從而實(shí)現(xiàn)負(fù)載均衡 。
- DiscoveryClient接口他是用來發(fā)現(xiàn)服務(wù)的,比如發(fā)現(xiàn)Netflix服務(wù),其中有個(gè)方法List getInstances(String serviceId)是根據(jù)服務(wù)ID獲取服務(wù)實(shí)例集合 。
- LoadBalancerInterceptor進(jìn)行請求攔截處理
- RibbonLoadBalancerClient首先通過getLoadBalancer根據(jù)服務(wù)ID獲取到負(fù)載,然后getServer會(huì)從多個(gè)負(fù)載中獲取到適合的服務(wù) 。其實(shí)現(xiàn)chooseServer如果沒有設(shè)置負(fù)載均衡規(guī)則,則使用默認(rèn)的輪詢算法 。
- IRule接口定義了choose方法 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時(shí)就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- linux安裝nginx詳細(xì)教程 查看linux位數(shù)系統(tǒng)
- nginx虛擬主機(jī)講解 nginx虛擬主機(jī)是什么
- 價(jià)位段內(nèi)體驗(yàn)最均衡的TWS降噪耳機(jī)
- 目前最均衡的三星手機(jī) 三星哪款手機(jī)性能最好
- 靠性能均衡而出名 就平均性能而言,目前最好的內(nèi)排序
- 納什均衡理論
- 服務(wù)器中用群集實(shí)現(xiàn)網(wǎng)絡(luò)負(fù)載平衡
- 什么是網(wǎng)絡(luò)負(fù)載平衡
- 群集節(jié)點(diǎn)安裝配置網(wǎng)絡(luò)負(fù)載平衡NLB
- 網(wǎng)絡(luò)負(fù)載平衡群集節(jié)點(diǎn)創(chuàng)建DNS主機(jī)記錄
