PGET,乙個簡單 易用的並行獲取資料框架

2022-03-01 19:07:04 字數 2443 閱讀 6349

當我們的服務收到乙個請求後,需要大量呼叫下游服務獲取業務資料,然後對資料進行轉換、計算後,響應給請求方。

如果我們採用序列獲取下游資料,勢必會增加響應時長,降低介面的qps。如果是並行獲取下游資料,則是不錯的。

最直接想到的並行獲取方法,無非是將乙個個獲取資料的方法封裝成乙個個task,然後放到執行緒池裡執行。但這種沒經過設計的使用方式,易用性很低,可復用性也很低。

經本人在實際的業務系統中,多次思考與設計。終於設計出當前這個框架。

特點:絕對的簡單、絕對的易用。

業務資料物件。用於將下游獲取到的資料封裝到此物件中。

開發者需自定義給物件,並實現ibizdata介面

業務資料物件提供者。此物件類似於分成結構中的service層,其呼叫下游資料來源(可以是rpc呼叫等)將得到的資料封裝到bizdata物件中。

此類需要新增@bizdataprovider註解。其方法返回值一定要是bizdata物件

在spring的xml中配置:

<

bean

class

="com.dyz.pget.core.bizdatamanager"

init-method

="init"

destroy-method

="destroy"

>

<

property

name

="corepoolsize"

value

="12"

/>

<

property

name

="maximumpoolsize"

value

="200"

/>

<

property

name

="keepalivetime"

value

="0"

/>

<

property

name

="queuesize"

value

="1000"

/>

bean

>

public

class userinfobizdata implements

ibizdata

public

userinfobizdata(long userid, string name, integer age)

/*** 如果此資料物件獲取失敗時的預設兜底值。如果不支援兜底,則返回null即可。

* @return

*/@override

public

ibizdata defaultbizdata()

@override

public

string format2string() }//

篇幅問題,此處只貼了乙個bizdata的**

@bizdataprovider

public

class

testbizdataprovider

public productinfobizdata getproductinfobizdata(long shopid,long productid)throws

exception

}

①getter模式:

使用案例**:

@test

public

void testgetter() throws

bizdatafetchexception

②injector模式:

定義乙個資料報裹物件,存放所需要的資料物件

public

class

private

userinfobizdata userinfobizdata;

private

shopinfobizdata shopinfobizdata;

private

productinfobizdata productinfobizdata;

public

userinfobizdata getuserinfobizdata()

public

shopinfobizdata getshopinfobizdata()

public

productinfobizdata getproductinfobizdata()

}

使用案例**:

@test

public

void testgetter() throws

bizdatafetchexception

相信你使用後,一定會覺著簡單易用。

注:使用時,沒必要把源**粘到業務系統中,自己打個jar包,讓業務系統依賴下就ok了。

Android乙個簡單易用的進度條

進行網路載入,為了使用者體驗,常常要用到進度條,我就找到乙個很方便的用法 private static final int messagetype 01 0x0001 private progressdialog progressdialog null 以下的方法是 private void pro...

如何選擇乙個簡單易用的雲桌面

如何選擇乙個簡單易用的企業級桌面雲系統 廢話少說,伺服器虛擬化相信大家都熟悉了,也沒啥難度了 但是桌面虛擬化就沒那們簡單。給你看乙個horizon view的系統架構,複雜不?反正乙個新手,不折騰個把月是摸不到門的 vmware horizon view 架構 域伺服器,連線伺服器,安全伺服器,co...

select並行處理的乙個簡單示例

select並行處理的乙個簡單示例 環境 aix5.5 c 標頭檔案 public.h include include include include include include include include include include include include include in...