Java 中异步回调的跟踪结果
Tracking results of Async callbacks in Java
我正在创建一个 REST API,它在循环中进行 API 调用。像这样:
@RequestMapping(value = "/sendmessages", method = RequestMethod.POST)
public ResponseEntity<String> sendMessage(ModelMap model,
HttpServletRequest req, HttpServletResponse res,
@RequestBody String requestBody) throws JSONException,
Exception {
JSONObject jsonObject = new JSONObject(requestBody);
JSONArray userIdArray = jsonObject.getJSONArray(ChatConstants.USER_IDS);
for (int i = 0; i < userIdArray.length(); ++i) {
pubnub.publish(SERVER, messageObject, new Callback() {
@Override
public void successCallback(String arg0, Object arg1) {
System.out.println(arg0);
System.out.println(arg1);
}
@Override
public void errorCallback(String arg0, PubnubError arg1) {
super.errorCallback(arg0, arg1);
System.out.println(arg0);
System.out.println(arg1);
}
});
}
return new ResponseEntity<String>(HttpStatus.OK);
}
我正在进行 PubNub 调用,这是一个异步调用,结果在回调中 returned。我想 return 在我的 API 调用中输出这些异步调用的输出。任何想法,我如何跟踪这些调用的结果?
我将介绍一种基于 2 种方法的解决方案。您已经有了 sendMessage() 并且还需要一个 checkMessageResult()。
在回调中,您可以将结果存储在某处(例如存储在会话中的地图中)或 "global" 地图中。
每次调用发送消息returns一些sentRequestId。然后客户端不时检查传递 sentRequestId 的请求的状态。调用回调时,结果存储在地图 Map 中。 checkMessageResult() 只是 returns 来自 sentRequestId 的地图内容。
我正在创建一个 REST API,它在循环中进行 API 调用。像这样:
@RequestMapping(value = "/sendmessages", method = RequestMethod.POST)
public ResponseEntity<String> sendMessage(ModelMap model,
HttpServletRequest req, HttpServletResponse res,
@RequestBody String requestBody) throws JSONException,
Exception {
JSONObject jsonObject = new JSONObject(requestBody);
JSONArray userIdArray = jsonObject.getJSONArray(ChatConstants.USER_IDS);
for (int i = 0; i < userIdArray.length(); ++i) {
pubnub.publish(SERVER, messageObject, new Callback() {
@Override
public void successCallback(String arg0, Object arg1) {
System.out.println(arg0);
System.out.println(arg1);
}
@Override
public void errorCallback(String arg0, PubnubError arg1) {
super.errorCallback(arg0, arg1);
System.out.println(arg0);
System.out.println(arg1);
}
});
}
return new ResponseEntity<String>(HttpStatus.OK);
}
我正在进行 PubNub 调用,这是一个异步调用,结果在回调中 returned。我想 return 在我的 API 调用中输出这些异步调用的输出。任何想法,我如何跟踪这些调用的结果?
我将介绍一种基于 2 种方法的解决方案。您已经有了 sendMessage() 并且还需要一个 checkMessageResult()。
在回调中,您可以将结果存储在某处(例如存储在会话中的地图中)或 "global" 地图中。
每次调用发送消息returns一些sentRequestId。然后客户端不时检查传递 sentRequestId 的请求的状态。调用回调时,结果存储在地图 Map 中。 checkMessageResult() 只是 returns 来自 sentRequestId 的地图内容。