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 的地图内容。