Java 正确处理泽西岛的后台呼叫

Java 正确处理泽西岛的后台呼叫,java,multithreading,jax-rs,jersey-2.0,jersey-client,Java,Multithreading,Jax Rs,Jersey 2.0,Jersey Client,我必须在web应用程序中对web服务进行一些后台调用。对我来说,电话的回应并不是真正的时间要求,也没有什么意思。它只在极少数情况下发生变化,我会通过抛出异常、记录失败或其他方式对其作出反应。 现在我的问题是在Jersey Client 2中如何正确处理此类异步调用 选项1使用来自jersey的异步调用,但随后为每个响应启动一个线程。 选项2将立即开始一条线,并从该线内使用球衣 一般来说,哪种选择更明智 选择1 private static final ExecutorService execu

我必须在web应用程序中对web服务进行一些后台调用。对我来说,电话的回应并不是真正的时间要求,也没有什么意思。它只在极少数情况下发生变化,我会通过抛出异常、记录失败或其他方式对其作出反应。 现在我的问题是在Jersey Client 2中如何正确处理此类异步调用

选项1使用来自jersey的异步调用,但随后为每个响应启动一个线程。 选项2将立即开始一条线,并从该线内使用球衣

一般来说,哪种选择更明智

选择1

private static final  ExecutorService executorService = Executors.newFixedThreadPool(20);
private static final  ExecutorService executorService = Executors.newFixedThreadPool(20);
--

--

--工作线程

  public class Worker implements Runnable {

     private Future<Response> futureResponse;

     public Worker(Future<Response> futureResponse){
         this.futureResponse = futureResponse;
     }

     @Override
     public void run() {
         try {
          final Response response = futureResponse.get();
          if(response.getStatus() == 500)
             doSomething();
         } catch(Exception e) {
             e.printStackTrace();
         }
      }
 }
  public class Worker implements Runnable {

     public Worker(){
     }

     @Override
     public void run() {
         try {
             Client client = ClientBuilder.newClient();
             WebTarget target = client.target("somehost").path("somepath");
             ClientResponse response = target.request().accept(MediaType.APPLICATION_JSON).post(Entity.json(myjsonobject), ClientResponse.class);
             if(response.getStatus() == 500) {
                  doSomething();
             }
          } catch(Exception e) {
                  e.printStackTrace();
          }
     }
 }

您可以简单地使用,将实例传递给
get
方法,而不是尝试实现“非阻塞”Future.get()(使用另一个线程)。比如说

Future<Response> future = target.request().async().get(new InvocationCallback<Response>(){
    @Override
    public void completed(Response response) {
        System.out.println(response.readEntity(String.class));
        response.close();
        client.close();
    }

    @Override
    public void failed(Throwable throwable) { /** Log exception **/ }
});
Future-Future=target.request().async().get(newinvocationcallback()){
@凌驾
已完成公共作废(响应){
System.out.println(response.readEntity(String.class));
response.close();
client.close();
}
@凌驾
public void失败(Throwable Throwable){/**日志异常**/}
});
更多信息请访问

  public class Worker implements Runnable {

     public Worker(){
     }

     @Override
     public void run() {
         try {
             Client client = ClientBuilder.newClient();
             WebTarget target = client.target("somehost").path("somepath");
             ClientResponse response = target.request().accept(MediaType.APPLICATION_JSON).post(Entity.json(myjsonobject), ClientResponse.class);
             if(response.getStatus() == 500) {
                  doSomething();
             }
          } catch(Exception e) {
                  e.printStackTrace();
          }
     }
 }
Future<Response> future = target.request().async().get(new InvocationCallback<Response>(){
    @Override
    public void completed(Response response) {
        System.out.println(response.readEntity(String.class));
        response.close();
        client.close();
    }

    @Override
    public void failed(Throwable throwable) { /** Log exception **/ }
});