首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncRestTemplate不调用删除端点

AsyncRestTemplate不调用删除端点
EN

Stack Overflow用户
提问于 2017-02-08 21:54:42
回答 1查看 237关注 0票数 0

我需要用fire中的delete方法调用rest端点,而不是方式。我不在乎结果。我正在尝试使用AsyncRestTemplate,但是没有调用服务器端。如果我切换到RestTemplate,一切都会正常工作。然后我注意到当我等待回应时

代码语言:javascript
复制
AsyncRestTemplate template = new AsyncRestTemplate();
ListenableFuture<ResponseEntity<String>> exchange = template.exchange(
    url, 
    HttpMethod.DELETE, 
    new HttpEntity<Object>(headers), 
    String.class
);
exchange.get();

它也在起作用。调用PUT端点没有任何问题(不必调用get()方法)。然后,我尝试使用超时,因为我不想等待响应,并使用

代码语言:javascript
复制
    try {
        exchange.get(1, TimeUnit.MILLISECONDS);
    } catch (InterruptedException | ExecutionException | TimeoutException e) {
        //dirty hack
    }

在我的机器上,如果我设置了1毫秒超时,那么这个端点被调用的几率是50%。到了50米利斯,机会太大了.

有什么想法有什么问题吗?

编辑:

我也试过

代码语言:javascript
复制
CompletableFuture.runAsync(() -> {
    try {
        exchange.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
});

已经起作用了。

代码语言:javascript
复制
AsyncRestTemplate template = new AsyncRestTemplate(
     new ConcurrentTaskExecutor(Executors.newCachedThreadPool())
);

如果不调用get()方法,则无法工作。

EN

回答 1

Stack Overflow用户

发布于 2017-02-09 08:27:36

如果您设置了1ms超时,那么请求实际上很可能会超时,但客户端也会在处理超时时终止连接。

尝试在线程中调用它或创建一个ExecutorService并将请求排队。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42124377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档