前言
ribbon是一個(gè)客戶端負(fù)載均衡器,它提供了對(duì)http和tcp客戶端的行為的大量控制。我們?cè)谏掀痛粒?a href="http://www.ythuaji.com.cn/article/174852.html" target="_blank">springcloud系列——feign 服務(wù)調(diào)用)已經(jīng)實(shí)現(xiàn)了多個(gè)服務(wù)之間的feign調(diào)用,服務(wù)消費(fèi)者調(diào)用服務(wù)提供者,本文記錄feign調(diào)用ribbon負(fù)載均衡的服務(wù)提供者
github地址:https://github.com/netflix/ribbon
服務(wù)提供者
服務(wù)提供者有兩個(gè),實(shí)際上可以看做只有一個(gè),因?yàn)檫@兩個(gè)只有端口不同
maven引入ribbon
1
2
3
4
5
|
<!-- ribbon --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-ribbon</artifactid> </dependency> |
創(chuàng)建ribbonconfig文件,主類添加@ribbonclient(name = "ribbonconfig", configuration = ribbonconfig.class),我這里偷懶,直接在主類中創(chuàng)建內(nèi)部類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
@enableeurekaclient @ribbonclient (name = "ribbonconfig" , configuration = ribbonconfig. class ) @springbootapplication public class springbootspringdatajpaapplication{ public static void main(string[] args) { springapplication.run(springbootspringdatajpaapplication. class , args); } } @configuration class ribbonconfig { @bean public irule ribbonrule(){ return new randomrule(); //分配策略:隨機(jī)選擇一個(gè)server // return new bestavailablerule(); //分配策略:選擇一個(gè)最小的并發(fā)請(qǐng)求的server,逐個(gè)考察server,如果server被tripped了,則忽略 // return new roundrobinrule(); //分配策略:輪詢選擇,輪詢index,選擇index對(duì)應(yīng)位置的server // return new weightedresponsetimerule(); //分配策略:根據(jù)響應(yīng)時(shí)間分配一個(gè)weight(權(quán)重),響應(yīng)時(shí)間越長(zhǎng),weight越小,被選中的可能性越低 // return new zoneavoidancerule(); //分配策略:復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server // return new retryrule(); //分配策略:對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制,在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subrule的方式選擇一個(gè)可用的server } @bean public iping ribbonping() { return new pingurl(); } @bean public serverlistsubsetfilter serverlistfilter() { serverlistsubsetfilter filter = new serverlistsubsetfilter(); return filter; } } |
下表顯示了spring cloud netflix默認(rèn)為ribbon提供的bean:
官網(wǎng)例子:
我們添加一個(gè)測(cè)試接口
1
2
3
4
5
6
7
8
9
10
|
@restcontroller @requestmapping ( "/user" ) public class usercontroller { @requestmapping ( "/ribbon" ) public string ribbon() { return "springdatejpa -- 我的端口是:10088" ; } } |
第二個(gè)服務(wù)提供者也是這樣配置,注意:應(yīng)用名要相同(spring.application.name=springdatejpa);端口不同;
服務(wù)消費(fèi)者
服務(wù)消費(fèi)者使用feign調(diào)用,無(wú)需做任何修改,feign已經(jīng)使用ribbon。具體配置請(qǐng)戳:springcloud系列——feign 服務(wù)調(diào)用
1
2
3
4
5
6
|
@feignclient (name = "springdatejpa" , path = "/user/" ) public interface myspringbootfeign { @requestmapping ( "/ribbon" ) string ribbon(); } |
1
2
3
4
5
6
7
|
/** * feign調(diào)用 */ @getmapping ( "feign/ribbon" ) string ribbon(){ return myspringbootfeign.ribbon(); } |
效果
啟動(dòng)所有項(xiàng)目,我們注冊(cè)了三個(gè)服務(wù),其中:
有兩個(gè)服務(wù)名稱相同、處理的業(yè)務(wù)相同、端口不同,這兩臺(tái)作為服務(wù)提供者(可看做是一個(gè)“小集群”);
另一個(gè)是服務(wù)消費(fèi)者(feign調(diào)用);
消費(fèi)者不斷調(diào)用,ribbon會(huì)從注冊(cè)中心的服務(wù)列表拉取實(shí)例集合進(jìn)行負(fù)載均衡調(diào)用背后的服務(wù)提供者
后記
ribbon負(fù)載均衡已經(jīng)可以實(shí)現(xiàn),更多配置請(qǐng)看官方文檔
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/huanzi-qch/p/10136254.html