开发者社区> 问答> 正文

http接口调用超时,怎么解决呢?

小旋风柴进 2016-03-04 11:41:44 4240

omcat8、springmvc、httpclient4.5
有A、B、C三个应用
C负责操作数据库,提供接口,返回JSON
B负责处理业务,提供接口,返回JSON,并调用C的接口,保存/读取数据
A负责前台,调用B的接口
正常使用没什么问题,但碰到并发的时候,出现僵死状态,感觉接口处理不过来,然后超时。
大并发时,页面一直转,就是加载不出来,然后后台sql也一直在执行,要等待所有的操作执行完了,C的接口才能正常加载。而此时B和A就会访问超时了。
请问有什么破解方案没?
tomcat 使用nio模式启动了。并且有两个C,通过nginx来负载。

httpclient调用代码大致如下:

public static String post(String url, Map<String, Object> param)
            throws IOException {
        String responseBody = null;
        RequestConfig config = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).setConnectionRequestTimeout(20000).setCookieSpec(CookieSpecs.STANDARD_STRICT).build();
        CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).build();
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> nameValuePairs = new LinkedList<>();
        for (String key : param.keySet()) {
            Object obj = param.get(key);
            if (obj == null) {
                obj = new String("");
            }
            nameValuePairs.add(new BasicNameValuePair(key, obj.toString()));
        }
        CloseableHttpResponse httpResponse = null;
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
            httpResponse = httpClient.execute(httpPost);
            StatusLine line = httpResponse.getStatusLine();
            if(line.getStatusCode() == 200) {
                HttpEntity httpEntity = httpResponse.getEntity();
                responseBody = EntityUtils.toString(httpEntity);
                EntityUtils.consume(httpEntity);
            }
        } catch (UnsupportedEncodingException e) {
            throw e;
        } catch (ClientProtocolException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        } finally {
            if (httpResponse != null) {
                httpResponse.close();
            }
            httpClient.close();
        }
        return responseBody;
    }

请问在服务器,或者http调用上面,有什么可优化方案?

SQL JSON 应用服务中间件 数据库 nginx 数据格式
分享到
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:52:02

    问题看来是c的性能不足,阻塞了,如果io的性能提升到了瓶颈,建议把c的读写分离,写入采用后台队列方式,并处理好数据同步的问题

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程