這是本人學(xué)習(xí)的總結(jié),主要學(xué)習(xí)資料如下
- 馬士兵教育
1、Ribbon簡介
我們都知道Ribbon
是用于負(fù)載均衡的。提供同一種服務(wù)的Client
可能有多個,比如有多個User Client
提供查詢用戶信息的服務(wù),使用Ribbon
就能簡單地達(dá)到負(fù)載均衡的效果。
1.1、架構(gòu)圖
想要使用Ribbon
,無論是服務(wù)提供者還是調(diào)用服務(wù)者都必須作為Client
注冊到Server
中。
1.2、簡單實(shí)現(xiàn)負(fù)載均衡
如果是使用RestTemplate
請求服務(wù),那么可以在RestTemplate
的bean
配置上加上@LoadBalanced
注解即可。之后使用RestTemplate
調(diào)用服務(wù)就會自動實(shí)現(xiàn)負(fù)載均衡。這樣的方式是循環(huán)輪詢的調(diào)用服務(wù)。
@Configuration
public class RestConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
現(xiàn)在我們有兩個UserClient
提供服務(wù),user-client1
和user-client2
。用order-client
去調(diào)用11次,因為是循環(huán)輪詢調(diào)用,會發(fā)現(xiàn)會交替調(diào)用user-client1
和user-client2
。
這是user-client1
和user-client2
的application.yml
,大部分配置都一樣,只有port
不相同。spg.application.name
必須一樣,不然Ribbon
會認(rèn)為他們不提供同一種服務(wù)。
這里他們兩都是user-client
。
spring:
application:
name: user-client
這是order-client
調(diào)用的代碼。只需要指定spring.application.name
,路徑和參數(shù)即可。
private int i = 0;
@Override
public String getUserInfo(String userId) {
return restTemplate.getForObject("http://user-client/getUserInfo?userId=" + i++, String.class);
}
可以看到兩個user-client
循環(huán)提供服務(wù)。
2、配置負(fù)載均衡策略
2.1、IRule
IRule
是代表規(guī)則的接口,它的實(shí)現(xiàn)類有RoundRobinRule
,即默認(rèn)調(diào)用服務(wù)的規(guī)則,循環(huán)調(diào)用。還有RondamRule
,隨機(jī)選取服務(wù)調(diào)用。
還有其他的策略這里就不一一介紹了??傊?code>IRule及其實(shí)現(xiàn)類給我們提供了一些常見的選擇策略。大部分情況我們可以選擇其中一種直接用,不用再自己寫。
2.2、使用IRule簡單示例
2.2.1、Overview
- 配置
IRule
的bean,將其中一個實(shí)現(xiàn)類注入到Spring中。這里我將選取RandomRule
注入。 - 將注入的
IRule
與具體的服務(wù)客戶端關(guān)聯(lián)起來,讓Ribbon
知道什么服務(wù)器用什么規(guī)則。在這里服務(wù)者是user-client
,我們需要把這個和剛才注入的IRule
綁定起來。
通過以上兩步就可以自定義負(fù)載均衡策略。
2.2.1、注入IRule
@Configuration
public class OrderRibbonRule {
@Bean
public IRule ribbonRule() {
return new RandomRule();
}
}
2.2.2、關(guān)聯(lián)IRule
和服務(wù)
在這里我有兩臺機(jī)器提供服務(wù),他們都是spring.application.name=user-client
,我們需要將剛才的注入的IRule
和user-client
關(guān)聯(lián)起來。
@Configuration
@RibbonClient(name = "user-client", configuration = OrderRibbonRule.class)
public class UserRibbonConfiguration {
}
之后通過http://localhost:9002/createOrder
訪問多次,可以看到Ribbon
隨機(jī)選取機(jī)器提供服務(wù)。
文章來源:http://www.zghlxwxcb.cn/news/detail-858137.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-858137.html
到了這里,關(guān)于Spring Cloud學(xué)習(xí)筆記(Ribbon):Ribbon的應(yīng)用樣例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!