我需要用fire中的delete方法调用rest端点,而不是方式。我不在乎结果。我正在尝试使用AsyncRestTemplate,但是没有调用服务器端。如果我切换到RestTemplate,一切都会正常工作。然后我注意到当我等待回应时
AsyncRestTemplate template = new AsyncRestTemplate();
ListenableFuture<ResponseEntity<String>> exchange = template.exchange(
url,
HttpMethod.DELETE,
new HttpEntity<Object>(headers),
String.class
);
exchange.get();它也在起作用。调用PUT端点没有任何问题(不必调用get()方法)。然后,我尝试使用超时,因为我不想等待响应,并使用
try {
exchange.get(1, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
//dirty hack
}在我的机器上,如果我设置了1毫秒超时,那么这个端点被调用的几率是50%。到了50米利斯,机会太大了.
有什么想法有什么问题吗?
编辑:
我也试过
CompletableFuture.runAsync(() -> {
try {
exchange.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});已经起作用了。
AsyncRestTemplate template = new AsyncRestTemplate(
new ConcurrentTaskExecutor(Executors.newCachedThreadPool())
);如果不调用get()方法,则无法工作。
发布于 2017-02-09 08:27:36
如果您设置了1ms超时,那么请求实际上很可能会超时,但客户端也会在处理超时时终止连接。
尝试在线程中调用它或创建一个ExecutorService并将请求排队。
https://stackoverflow.com/questions/42124377
复制相似问题