Как асинхронно обрабатывать объект в очереди и делать пост-запрос в Джерси - PullRequest
0 голосов
/ 19 октября 2018

У меня есть код, который

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 голосов
/ 19 октября 2018

Вы можете запустить QueueProcessor в одном потоке, просто вынимая вещи из очереди и отправляя запросы в новых потоках.Я бы использовал https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html. Если запрос не выполняется в новых потоках, вы бы запросили объект json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...