跟踪Java中异步回调的结果

时间:2015-01-27 07:09:09

标签: java spring asynchronous pubnub

我正在创建一个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调用,这是一个异步调用,结果在回调中返回。我想在API调用中返回这些异步调用的输出。任何想法,我如何跟踪这些电话的结果?

1 个答案:

答案 0 :(得分:1)

我将介绍一种基于2方法的解决方案。你已经有了sendMessage(),还需要一个checkMessageResult()。

在回调中,您可以将结果存储在某处(例如,存储在会话中的地图中)或“全局”中的结果。地图。

每次调用send消息都会返回一些sentRequestId。然后客户端不时检查通过sentRequestId的请求的状态。调用回调时,结果存储在地图Map中。 checkMessageResult()只返回sentRequestId的地图内容。