您好,登錄后才能下訂單哦!
最近剛剛做完一個(gè)新項(xiàng)目,記錄分享一個(gè)批量調(diào)用第三方接口方法。相信有很多朋友在項(xiàng)目中都遇到過需要批量調(diào)用第三方接口,所以今天在這里分享一下,寫的不好就多多指教。
首先,簡(jiǎn)單的介紹一下需求,判斷一個(gè)電話號(hào)碼的歸屬地,需要返回它的省份和城市。
? ? ? ? ? ?private List<String> getUpdateDataList(List<String> phoneList) { // 創(chuàng)建線程池,這里創(chuàng)建了20個(gè) ExecutorService executorService = Executors.newFixedThreadPool(20); // 保存任務(wù)的返回結(jié)果 List<Future<String>> futureList = new ArrayList<>(); // 分配任務(wù) for (String loopStr : phoneList) { // 啟動(dòng)多線程返回號(hào)碼的城市,有返回值使用submit(),并且多線程實(shí)現(xiàn)callable接口 Future<String> future = executorService .submit(new UpdateCityThreadJob<String>(loopStr)); futureList.add(future); } // 關(guān)閉線程池 executorService.shutdown(); // 保存城市 List<String> collection = new ArrayList<>(); // 取出任務(wù)中的參數(shù) for (Future<String> future : futureList) { try { // 取出任務(wù)中的結(jié)果 String city = future.get(); collection.add(city); } catch (Exception e) { throw new AppException(HttpStatus.INTERNAL_SERVER_ERROR); } } return collection; } |
? ? ?// 創(chuàng)建任務(wù)類,因?yàn)橛蟹祷刂?,所以必須?shí)現(xiàn)callable接口
public class UpdateCityThreadJob<V> implements Callable<String> { ? ? ? ? // 電話號(hào)碼 private String phoneNumber; public UpdateCityThreadJob(String phoneNumber) { this.phoneNumber = phoneNumber; } /** * @param phoneNumber 電話號(hào)碼 * @return 城市 * @Description 獲取 電話號(hào)碼歸屬地郵政信息 */ private String getCityRepeat(String phoneNumber) { String city = ""; try { city = getCity(phoneNumber); } catch (Exception e) { // 請(qǐng)求失敗,重試五次,(防止網(wǎng)絡(luò)原因?qū)е抡?qǐng)求失?。?/p> for (int i = 0; i < 5; i++) { try { city = getCity(phoneNumber); } catch (Exception e1) { continue; } } } return city; } /** *? * @Description 獲取城市 * @param phoneNumber 電話號(hào)碼 * @return 城市 * @throws Exception */ private String getCity(String phoneNumber) throws Exception { // 請(qǐng)求第三方接口判斷號(hào)碼歸屬地 String result = HttpClient .doGet("http://apis.juhe.cn/mobile/get?phone=" + phoneNumber + "&dtype=xml&key=" + Constants.API_KEY);
return result; } @Override public String call() throws Exception { synchronized (phoneNumber) { ? ? ? ? ? ? ? ? ? ? ? ?? // 獲取城市 String city = getCityRepeat(phoneNumber); return city; } } } |
? ? 調(diào)用第三放接口時(shí),一般都會(huì)出現(xiàn)連接不穩(wěn)定等等的異常,一般處理方式,都是重試幾次即可。??
? ? 代碼是不是超級(jí)簡(jiǎn)單,只要思維清晰,什么問題都可以從容面對(duì)。。。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。