Java 如果响应时间过长,则取消rest请求

Java 如果响应时间过长,则取消rest请求,java,rest,timeout,Java,Rest,Timeout,如果响应时间超过3秒,我想取消一个REST请求,但我还没有找到解决方法 假设我有一个线程a: @Override public void run() { RestTemplate restTemplate = new RestTemplate(); IsAliveMessage isAliveMessage = new IsAliveMessage(nodeInfo.getHostname(), nodeInfo.getPort()); IsAliveResponse i

如果响应时间超过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一直在等待答案的到来。我怎样才能在一段时间后放弃等待


提前感谢

您可以将RestTemplate配置为等待三秒钟,以获得如下响应:

RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());

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

实际上,当建立连接的时间超过三秒时,会发生connectTimeout,当客户端在三秒内未从服务器接收任何数据时,会发生readTimeout。因此,基本上,如果服务器的响应速度慢,但中断时间短于三秒,那么使用这种配置的服务器响应可能需要很长时间