首页 > 解决方案 > 如何使用 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客户端新建了一个线程,一直等到线程释放。这个对吗?如果是这样,满足我要求的方法是什么?

如果没有,请向我解释我在这里缺少什么以及正确的解决方案。

标签: javajerseyhttpclientrest

解决方案


推荐阅读