服務間呼叫方法:HttpClient
阿新 • • 發佈:2019-01-03
在公司涉及到這樣一個需求,要求一個工程呼叫另一個工程的介面,一開始還挺高興,自己做過dubbo的,這個應該不是問題,因為我們這個專案沒有使用Dubbo框架,所以得用另一種方法了。
最一開始我想著將另一個工程打成jar包使用,後來覺得這種方法應該效率會很低,一個工程裡又放另一個工程。
後來從周博大哥那裡知道使用HttpClient就可以。
HttpClient方法的使用
配置檔案
config.properties配置url資訊:
#countryData URI
doc.method=http:localhost:8080/nation_data_admin
doc.SelectNationDataList .uri=/nationData/selectNationData
Controller資訊:
String url = ApplicationUtil.getValue("doc.method")
+ApplicationUtil.getValue("doc.SelectDataService.uri") + "?code=" + code;
result = MyHttpClient.getMethod("http://" + url);
由於該方法是get請求,所需傳的引數應該是自行拼接,如果是post方式則不必拼接,具體看MyHttpClient類對post方法的定義:
public static String postMethod(String url,Map parameters)throws Exception{
HttpPost post = null;
CloseableHttpResponse response = null;
try{
post = new HttpPost(url);
if(parameters!=null){
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
Iterator it = parameters.entrySet().iterator();
while (it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
String key = (String)entry.getKey();
String value = (String)entry.getValue();
nvps.add(new BasicNameValuePair(key, value));
}
post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
}
response = client.execute(post);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
return result;
}catch(Exception e){
e.printStackTrace();
}finally{
try{
response.close();
post.releaseConnection();
}catch(Exception e){
e.printStackTrace();
}
}
return null;
}
一開始我傳的引數是map,有{},在url中就會自動拼接,但是url是無法識別這個符號的,後來乾脆就改了引數的傳遞方式,改傳map為多個引數,本來這樣呼叫以為就可以成功了,結果報錯,查了查是因為在url中無法拼接protocol錯誤,原來是url前沒加http。
期間還有個問題,就是如果傳的引數為null,就不用在url拼接,那麼就用到StingBuffer直接append了。具體用法:
StringBuffer sb = new StringBuffer();
sb.append(ApplicationUtil.getValue("doc.method"));
sb.append(ApplicationUtil.getValue("doc.SelectNationDataList.uri") + "?");
if(dataClassification != null && dataClassification.length()>0){
sb.append("dataClassification=" + dataClassification + "&");
Dubbo
對dubbo的認識停留在遠端呼叫,RPC。可是具體的原理還沒有系統學習過。這幾天剛好學習taotao,所以就下篇部落格小編會對dubbo總結一下吧,剛好和今天的httpClient呼應。
總結
從專案中學到了很多東西,和之前學的dubbo聯絡起來,加深了對服務呼叫的認識。這介面調通多虧了很多小夥伴的幫助啊,多謝嘍!