免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
基于hystrix的高并發(fā)&高可用服務(wù)架構(gòu)基礎(chǔ)實(shí)例(線程池隔離技術(shù))

代碼倉(cāng)庫(kù)https://gitee.com/jikeh/JiKeHCN-RELEASE.git

1、簡(jiǎn)介

1)wiki簡(jiǎn)介

https://github.com/Netflix/Hystrix/wiki

簡(jiǎn)而言之:

在分布式系統(tǒng)中,存在很多依賴服務(wù),有的時(shí)候某些依賴服務(wù)出現(xiàn)故障也是很正常的,我們?nèi)绾伪WC在某個(gè)依賴服務(wù)故障的時(shí)候,來(lái)保證系統(tǒng)能夠整體正常運(yùn)行呢?

使用hystrix,我們可以把其,當(dāng)作一種類似于springboot,dubbo,mybatis的框架,使用了該框架,可以保證我們的系統(tǒng)服務(wù)高可用

Hystrix可以讓我們?cè)诜植际较到y(tǒng)中對(duì)服務(wù)進(jìn)行一些控制:資源隔離、限流、熔斷、降級(jí)、運(yùn)維監(jiān)控,通過(guò)這些方法幫助我們提升分布式系統(tǒng)的可用性和穩(wěn)定性

這節(jié),我們主要講一下使用hystrix的線程池隔離技術(shù)來(lái)實(shí)現(xiàn)資源隔離的基礎(chǔ)實(shí)例,下一節(jié)我們將抽取廣告系統(tǒng)的某個(gè)功能來(lái)應(yīng)用下該技術(shù)?。?!

那什么是資源隔離?

資源隔離:讓整個(gè)業(yè)務(wù)系統(tǒng)里,不會(huì)因某個(gè)依賴服務(wù)出現(xiàn)故障,而耗盡系統(tǒng)所有的資源,比如線程資源

2)官網(wǎng)介紹的簡(jiǎn)單使用

https://github.com/Netflix/Hystrix

簡(jiǎn)單看下,如果看不懂也沒(méi)事,繼續(xù)往下看,當(dāng)然也可以看我上傳的視頻

2、基礎(chǔ)功能

獲取廣告信息

這里,我們就是獲取一個(gè)字符串來(lái)模擬獲取廣告信息:

private String getStr(String name){

return 'Hello ' + name + '!';

}

3、使用hystrix的線程池隔離技術(shù)改造上面的代碼

1)處理單個(gè)請(qǐng)求

public class CommandHelloWorld extends HystrixCommand {

private final String name;

public CommandHelloWorld(String name) {

super(HystrixCommandGroupKey.Factory.asKey('GetAdsGroup'));

this.name = name;

}

@Override

protected String run() {

return 'Hello ' + name + '!';

}

}

2)處理批量請(qǐng)求

public class ObservableCommandHelloWorld extends HystrixObservableCommand {

private String[] adIds;

public ObservableCommandHelloWorld(String[] adIds) {

super(HystrixCommandGroupKey.Factory.asKey('GetAdsGroup'));

this.adIds = adIds;

}

@Override

protected Observable construct() {

return Observable.create(new Observable.OnSubscribe() {

public void call(Subscriber observer) {

try {

for(String adId : adIds) {

observer.onNext('Hello ' + adId + '!');

}

observer.onCompleted();

} catch (Exception e) {

observer.onError(e);

}

}

}).subscribeOn(Schedulers.io());

}

}

4、單元測(cè)試

1)測(cè)試單個(gè)請(qǐng)求

/**

* Hystrix基礎(chǔ)實(shí)例1:?jiǎn)蝹€(gè)請(qǐng)求

*/

public class UnitTestCommand {

//同步:

@Test

public void testSynchronous() {

String str = new CommandHelloWorld('World').execute();

System.out.println(str);

}

//異步:

@Test

public void testAsynchronous() throws Exception {

Future fWorld = new CommandHelloWorld('World').queue();

String str = fWorld.get();

System.out.println(str);

}

}

2)測(cè)試批量請(qǐng)求

/**

* Hystrix基礎(chǔ)實(shí)例2:批量請(qǐng)求(基于觀察者)

*/

public class UnitTestObservableCommand {

//異步:

@Test

public void testAsynchronous() throws Exception {

String adIds = '1,2,3';

//異步獲取執(zhí)行:

HystrixObservableCommand getAdInfosCommand = new ObservableCommandHelloWorld(adIds.split(','));

Observable observable = getAdInfosCommand.observe();

//訂閱一個(gè)觀察者來(lái)觀察執(zhí)行結(jié)果

observable.subscribe(new Observer() {

public void onCompleted() {

System.out.println('獲取完了所有的廣告數(shù)據(jù)');

}

public void onError(Throwable e) {

e.printStackTrace();

}

public void onNext(String adInfo) {

System.out.println(JSONObject.toJSONString(adInfo));

}

});

//同步獲取執(zhí)行結(jié)果:我們一次查詢,肯定是返回結(jié)果集的組合

List ads = new ArrayList<>();

Iterator iterator = observable.toBlocking().getIterator();

while(iterator.hasNext()) {

ads.add(iterator.next());

}

System.out.println('最終的結(jié)果集:'+ads);

}

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
分布式系統(tǒng)中的限流、降級(jí)、熔斷技術(shù)解決方案
RxJava 和 RxAndroid 二(操作符的使用)
Hystrix 使用與分析
3分鐘了解穩(wěn)定性利器Hystrix——讓你的服務(wù)更穩(wěn)一點(diǎn)
Soul網(wǎng)關(guān)Hystrix插件相關(guān)知識(shí)點(diǎn)掃盲
Hystrix高可用系統(tǒng)容錯(cuò)框架,資源隔離,熔斷,限流
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服