我需要在 fire中使用delete方法调用rest endpoint并忘记方式。我不在乎结果。 我试图使用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毫克时,它有100%的机会...
任何想法是什么问题?
编辑:
我也试过
CompletableFuture.runAsync(() -> {
try {
exchange.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
已经奏效。
AsyncRestTemplate template = new AsyncRestTemplate(
new ConcurrentTaskExecutor(Executors.newCachedThreadPool())
);
不调用get()方法不起作用。
答案 0 :(得分:0)
如果设置1 ms超时,则请求实际上很可能会超时,但客户端也会在处理超时时终止连接。
尝试在线程中调用它或创建ExecutorService
并排队请求。