java - 如何使用 jersey 客户端对 rest api 进行真正的异步调用?
问题描述
我有一个要求,我调用一个 POST REST API,然后在不等待响应的情况下继续进行。我尝试使用球衣客户端(AsyncWebResource)。
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.AsyncWebResource;
import com.sun.jersey.api.client.ClientResponse;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.map.ObjectMapper;
public static void getResponse() {
try {
System.out.println("start");
String restURL = "http://localhost:7101/serviceapp/updateRecord";
Client client = Client.create();
Map<String, String> body = new HashMap<String, String>();
body.put("key1", "value1");
body.put("key2", "value2");
body.put("key3", "value3");
ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writeValueAsString(body);
AsyncWebResource webResource = client.asyncResource(restURL);
webResource.accept("application/json").type("application/json").post(ClientResponse.class, requestBody);
System.out.println("end");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
我看到“开始方法”和“结束方法”在控制台中打印出来,没有任何时间间隔。但是该方法在退出之前执行了一段时间。
网上搜了一下(包括栈溢出),发现async客户端新建了一个线程,一直等到线程释放。这个对吗?如果是这样,满足我要求的方法是什么?
如果没有,请向我解释我在这里缺少什么以及正确的解决方案。
解决方案
推荐阅读
- mysql - 如何在 Docker 容器中恢复 mysql 数据库转储
- arrays - 根据后验平均基因型计算等位基因频率
- docker - 没有 Docker 的 Jenkins 代理
- python - 如何在列表中的两个项目之间找到项目?
- flutter - 对无状态小部件中的 focusNode 事件做出反应
- html - CSS 和 R 降价(bookdown)。如何在不更改整体模板的情况下使用 CSS 构建 CSS 框?
- c# - 如何创建自己的 C# 代码脚手架扩展?
- oracle - OracleDB 协议有规范吗?
- java - 无法在 Java 中为 slf4j 显示 .debug() 消息
- jetbrains-ide - JetBrains Rider 中是否有任何方法可以在文件之间保留“查找”输入框