如果响应时间太长,请取消休息请求

伊琳娜·阿夫拉姆(Irina Avram)

如果响应时间超过3秒,我想取消REST请求,但是我还没有弄清楚该怎么做。

假设我有一个线程A:

@Override
public void run() {
    RestTemplate restTemplate = new RestTemplate();
    IsAliveMessage isAliveMessage = new IsAliveMessage(nodeInfo.getHostname(), nodeInfo.getPort());
    IsAliveResponse isAliveResponse = restTemplate.postForObject(
        "http://" + nodeInfo.getHostname() + ":" + nodeInfo.getPort() + "/node/isAlive",
         isAliveMessage,
         IsAliveResponse.class);
}

发出请求并期望得到B的答复:

@RequestMapping( value="/isAlive", method= RequestMethod.POST)
    public IsAliveResponse isAlive() throws ConnectException {
        try {
            Thread.sleep(100000);
            IsAliveResponse response = new IsAliveResponse("here here!" ,true);
            return response;
        } catch (Exception e) {
            Thread.currentThread().interrupt();
    }
}

B“睡觉”并且不回答,但是A一直在等待那个答案的到来。经过一定时间后,我该如何放弃A的等待?

提前致谢

达里里斯

您可以将RestTemplate配置为等待三秒钟的响应,如下所示:

RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());

private ClientHttpRequestFactory getClientHttpRequestFactory() {
    int timeout = 3000;
    HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
    new HttpComponentsClientHttpRequestFactory();
    clientHttpRequestFactory.setConnectTimeout(timeout);
    clientHttpRequestFactory.setReadTimeout(timeout);
    return clientHttpRequestFactory;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章