1.詢價介紹(包含背景,以及初始問題)
1)背景
? ? ? ? ? 做一個詢價應(yīng)用旧困,這個應(yīng)用需要從三個電商詢價敷搪,然后保存在自己的數(shù)據(jù)庫里。
2)代碼以及出現(xiàn)問題
詢價代碼
這種方案可靠安全留量,但是性能比較低下窄赋,因為是串行
2.方案改良
1)?方案1--》Future--》簡單并行
? ?1.實現(xiàn):
Future代碼展示
? ?2.問題:如果獲取電商S1報價的耗時很長哟冬,那么即便獲取電商S2報價的耗時很短,也無法讓保存S2報價的操作先執(zhí)行忆绰,因為這個主線程都阻塞在了 f1.get() 操作上
2)?方案2--》CompletionService---》批量并行
1.實現(xiàn):
CompletionService實現(xiàn)圖
這樣就可以保證先執(zhí)行結(jié)束的先入隊浩峡,并保存到數(shù)據(jù)庫中
2.適用場景:Dubbo中有一種叫做Forking的集群模式,這種集群模式下错敢,支持并行地調(diào)用多個查詢服務(wù)翰灾,只要有一個成功返回結(jié)果,整個服務(wù)就可以返回了稚茅!例如你需要提供一個地址轉(zhuǎn)坐標的服務(wù)纸淮,為了保證該服務(wù)的高可用和性能,你可以并行地調(diào)用3個地圖服務(wù)商的API亚享,然后只要有1個正確返回了結(jié)果r咽块,那么地址轉(zhuǎn)坐標這個服務(wù)就可以直接返回r了。
3)詢價擴展:計算最低價
1.實現(xiàn):
使用countDownLatch優(yōu)化代碼