服务间调用方法:HttpClient

      在公司涉及到这样一个需求,要求一个工程调用另一个工程的接口,一开始还挺高兴,自己做过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联系起来,加深了对服务调用的认识。这接口调通多亏了很多小伙伴的帮助啊,多谢喽!

猜你喜欢

转载自blog.csdn.net/hongwei15732623364/article/details/78617930
今日推荐