我想使用JAX-RS客戶端API通過HTTP GET請求資源,通過使用以下代碼:(我使用jersey-client v2.12以及resteasy-client v3 .0.8。最後測試實現)JAX-RS客戶端API異步請求
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.InvocationCallback;
public class StackOverflowExample {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
client.target("http://example.com/").request().async().get(new InvocationCallback<String>() {
@Override
public void completed(String s) {
System.out.println("Async got: " + s);
}
@Override
public void failed(Throwable throwable) {
System.out.println("Async failure...");
}
});
}
}
正如我預期的字符串打印幾乎立即。但是這個過程持續運行大約一分鐘,儘管沒有任何應該執行的代碼。 JAX-RS規範只是說我們應該使用InvocationCallback
而沒有別的對我的問題至關重要。但即使我使用Future
也會產生相同的效果。我還測試過,如果這與超時有關,這是非常不可能和錯誤的。調試器顯示有一些線程正在運行,即DestroyJavaVM
和jersey-client-async-executor-0
或pool-1-thread-1
在resteasy的情況下。
你知道這裏出了什麼問題嗎?