我有一些代码
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方法中,我需要实现什么才能使整个过程变得异步?
答案 0 :(得分:0)
您可以让QueueProcessor在一个线程中运行,只是将事情移出队列并在新线程中发送请求。我会使用https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html。如果请求在新线程中失败,则将重新排队json对象。