您的位置:首页 > 理论基础 > 计算机网络

服务间调用方法:HttpClient

2017-11-23 18:54 501 查看
在公司涉及到这样一个需求,要求一个工程调用另一个工程的接口,一开始还挺高兴,自己做过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联系起来,加深了对服务调用的认识。这接口调通多亏了很多小伙伴的帮助啊,多谢喽!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: