Arcus java client๋ ๋น๋๊ธฐ ์ฐ์ฐ์ ๋ฐํ ๊ฐ์ผ๋ก Future๋ฅผ ๊ตฌํํ ๋ฐํ ํ์
์ ์ ๊ณตํ๊ณ ์๋ค.
์ด ๊ตฌํ์ฒด๋ค์ ์ด์ฉํด ๋จ์ํ ๋น๋๊ธฐ ์ฐ์ฐ ๊ฐ์ ๋ฐํ ๋ฐ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์๋ค.
๊ทธ์ค์ get()๊ณผ getSome() API๋ฅผ ํตํด ์ฐ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค. ์ด๋ฅผ ์์๋ณด๋๋ก ํ์
์ผ๋ฐ์ ์ธ Future์ get()์ timeout ์์ด ์ฐ์ฐ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ์ฌ ์ฐ์ฐ๋ ๊ฐ์ ๋ฐํํ๋ค.
์ด์ ๋ค๋ฅด๊ฒ Arcus java client์์๋ default timeout์ด ์ค์ ๋์ด ์์ด์, ์ค์ ๋ ์๊ฐ์ด ์ง๋๋ฉด ๊ทธ๋์ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋
๋ชจ๋ ๋ฒ๋ ค์ง๊ณ OperationTimeoutException๊ณผ ํจ๊ป null์ด ๋ฐํ๋๋ค. (all or nothing)
V get()
V get(long timeout, TimeUnit unit)get()์ default timeout์ธ 700ms ๋งํผ ๋๊ธฐํ๋ค. ๋๊ธฐํ 700ms ์๊ฐ ์์ ์๋ต์ด ์์ผ๋ฉด,OperationTimeoutException์ด ๋ฐ์ํ๋ค.get(long timeout, TimeUnit unit)๋ฉ์๋๋get()๋ฉ์๋์ ๋์๊ณผ ๋์ผํ์ง๋ง, timeout ์๊ฐ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.get()์ฐ์ฐ์ default timeout์ConnectionFactoryBuilder์setOpTimeout()๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ณ๊ฒฝํ ์ ์๋ค.- ์ฐ์ฐ ์์
์ฒ๋ฆฌ ๋์ค ํด๋น ์ฐ์ฐ ์์
์ด ์ธํฐ๋ฝํธ ๋๋ฉด
InterruptedException์ ๋ฐ์์ํจ๋ค. - ์ฐ์ฐ ์์
์ฒ๋ฆฌ ๋์ค ์์ ์ธ๊ธํ ์์ธ ์ด์ธ์ ๋ค๋ฅธ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด
ExecutionException์ ๋ฐ์์ํจ๋ค.
asyncGetBulk(), asyncGetsBulk() API ์ฐ์ฐ์ ํตํด ๋ฐํ๋ฐ๋ BulkGetFuture์์๋ getSome() API๋ฅผ ์ง์ํ๋ค.
์ด API๋ timeout์ด ๋ฐ์ํ๋ฉด get() API์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฆฌ๊ณ null์ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ,
๊ทธ ์์ ๊น์ง ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค (partial). ๋ฐ๋ผ์, ์์ฉ์์๋ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ,
๋ฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ง ๋ฐฑ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ๋ฉด ๋๋ฏ๋ก ๋ฆฌ์์ค์ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค.
V getSome(long timeout, TimeUnit unit)์๋ ์ฝ๋๋ get()๊ณผ getSome()์ ์คํํ ์์ ์ฝ๋์ด๋ค. ์ด๋ฅผ ํตํด get()๊ณผ getSome() ์ฐจ์ด๋ฅผ ์ ์ ์๋ค.
get()์ ์ง์ ํ ์๊ฐ์ด ์ง๋๋ฉด TimeoutException์, getSome()์ ์ง์ ์๊ฐ๋์ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ๋๋ค.
List<String> keyList = new ArrayList<String>();
for(int i = 1; i < 300; i++) {
client.set("key" + i, 5 * 60, "value");
keyList.add("key"+i);
}
Map<String, Object> map = null;
BulkFuture<Map<String, Object>> future = client.asyncGetBulk(keyList);
try {
map = future.get(6, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
System.out.println(map);
Map<String, Object> map2 = null;
BulkFuture<Map<String, Object>> future2 = client.asyncGetBulk(keyList);
try {
map2 = future2.getSome(6, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println(map2);ํด๋น ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
# get()
null
# getSome()
{
key118=value, key117=value, key114=value, key234=value, key113=value, key237=value, key115=value, key231=value, key230=value,
key42=value, key111=value, key199=value, key232=value, key37=value, key36=value, key35=value, key34=value, key190=value,
key38=value, key191=value, key129=value, key128=value, key249=value, key51=value, key125=value, key124=value, key245=value,
key248=value, key126=value, key247=value, key55=value, key121=value, key242=value, key54=value, key53=value, key243=value,
key47=value, key46=value, key217=value, key216=value, key219=value, key62=value, key61=value, key179=value, key60=value,
key215=value, key297=value, key65=value, key175=value, key211=value, key299=value, key177=value, key58=value, key171=value,
key292=value, key174=value, key295=value, key56=value, key170=value, key107=value, key228=value, key106=value, key109=value,
key103=value, key224=value, key102=value, key71=value, key105=value, key226=value, key225=value, key187=value, key76=value,
key189=value, key74=value, key100=value, key221=value, key183=value, key68=value, key185=value, key67=value, key180=value
}
- get()์ timeout์ ์ํด null์ ๋ฐํํ์๋ค. (all or nothing)
- getSome()์ timeout ์์ ๊น์ง ์กฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์๋ค. (partial)
Arcus java client์ Future ๊ตฌํ์ฒด๋ค ์ค getStatus() ๋๋ getOperationStatus() API๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด API๋ค์ ์ฐ์ฐ์ ์ํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ API์ด๋ค. ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์ํ ์ ๋ณด๋ฅผ ๋ฐํํ๊ณ ,
์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ผ๋ฉด ์ฑ๊ณต ์ํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ค.
์ฌ์ฉ์๊ฐ ์ง์ Future๋ฅผ ํตํด ๋ช ๋ น์ cancel ์ํค๊ฑฐ๋ ๋ด๋ถ์ ์ผ๋ก cancel ๋ ๊ฒฝ์ฐ CANCELED ์ํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ค. ํ์ง๋ง ์ด ์ ๋ณด๋ ์ถํ ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ์์ ์๋ต์ ์ฝ์์ ๋ ๋ฎ์ด์ฐ์ฌ์ง ์ ์๋ค.
OperationStatus getStatus()
CollectionOperationStatus getOperationStatus()