如何异步处理队列中的对象并在Jersey中进行发布请求

时间:2018-10-19 19:27:13

标签: java asynchronous jersey

我有一些代码

1-将一些数据转换为JSONObject

2-将JSONObject添加到队列中

从队列

3-peek()JSONObject并将其发送到外部API

4-如果得到200,则从队列中删除JSONObject。如果得到5xx,则重新发送该对象。

以下是我到目前为止完成的代码。

public class QueueProcessor {

private static Queue<JSONObject> objectQueue;

static {
     objectQueue = new ObjectQueue<JSONObject>();
}

public void addToQueue(JSONObject json) {

     objectQueue.add(auditEvent);
     //do some *ASYNCHRONOUSLY* process with the queue items



     sendRequest(persistantQueue.peek()); 
}

 public void sendRequest(JSONObject json) {

  Client client = ClientBuilder.newClient();
  WebTarget baseTarget = client.target("someUrl");
  Invocation.Builder builder = baseTarget.request();
  Response response = builder.post(Entity.entity(json.toString(), MediaType.APPLICATION_JSON));

  int code = response.getStatus();   
  if (200 == code) {
        objectQueue.remove();
     }
  if (500 <= code) {
     //resending the object
  }
}

我的问题是在addToQueue方法中,我需要实现什么才能使整个过程变得异步?

1 个答案:

答案 0 :(得分:0)

您可以让QueueProcessor在一个线程中运行,只是将事情移出队列并在新线程中发送请求。我会使用https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html。如果请求在新线程中失败,则将重新排队json对象。