http接口调用超时,怎么解决呢?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-03-04 11:41:44 17136 1

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调用上面,有什么可优化方案?

取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:52:02

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

    0 0
相关问答

1

回答

智能对话分析的http访问各接口完成地址有哪些组成

2020-04-06 00:04:20 207浏览量 回答数 1

1

回答

智能对话分析的http访问各接口完成地址有哪些组成

2020-03-26 22:29:14 206浏览量 回答数 1

1

回答

如何模拟http请求中的函数?

2019-12-25 21:54:14 347浏览量 回答数 1

1

回答

参数是否在http POST请求中传递?

2019-12-23 20:53:18 260浏览量 回答数 1

0

回答

SLB配置HTTP访问强制跳转HTTPS。资源文比如js文件的http路径也会变成https请求吗?

2019-12-18 12:45:21 1343浏览量 回答数 0

1

回答

http的请求报⽂是什么样的?

2019-12-08 14:44:07 710浏览量 回答数 1

1

回答

到服务器的HTTP请求不会更新标签[重复]

2019-11-27 16:24:16 654浏览量 回答数 1

1

回答

列举Http请求中的状态码?

2019-11-22 12:40:15 1234浏览量 回答数 1

1

回答

列举Http请求中常见的请求头?

2019-11-22 12:41:15 1325浏览量 回答数 1

0

回答

短信发送走代理怎么http请求

2019-05-06 12:04:36 460浏览量 回答数 0
2709
文章
6591
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载