Java Websocket / MessageHandler返回全局范围?

时间:2016-11-21 07:35:49

标签: java websocket message-handlers

我面临以下问题,但我找不到有效的解决方案。 我有3个不同的应用程序应该相互通信:

  • UI部分(1)
  • 后端应用程序(2)
  • 云中的微服务"" (3)

后端应用程序为UI提供Web服务(REST)以从微服务获取信息并将信息传递给微服务。 我想从微服务中获取的一切工作正常,但是: 如果我想将数据放入微服务,则规范需要websocket连接。这也很好,但是微服务在(非)成功命令之后返回一条消息,比如

{"statusCode":200,"messageId":"1234567890"}

现在的问题是:如何在我的应用程序中获取此消息并将其发送回UI,以便用户知道命令是否成功?

目前我试过这个:

WebSocketClient.java

@OnMessage
public void onMessage(Session session, String msg) {
    if (this.messageHandler != null) {
        this.messageHandler.handleMessage(msg);
    }
}
public void addMessageHandler(MessageHandler msgHandler) {
    this.messageHandler = msgHandler;
}
public static interface MessageHandler {

    public String handleMessage(String message);
}

MyTotalAwesomeController.java

public class MyTotalAwesomeController {

    WebSocketClient wsc = new WebSocketClient();
    ...


    @RequestMapping(value="/add", method={RequestMethod.POST, RequestMethod.OPTIONS})
    public ResponseEntity<Object> putDataToMicroservice(@RequestBody Map<String, Object> payload, @RequestHeader(value = "authorization") String authorizationHeader) throws Exception {
    ...

    wsc.addMessageHandler(new WebSocketClient.MessageHandler() {
        public String handleMessage(String message) {

            System.out.println("RETURN MSG FROM WSS : " + message);
            return message;
        }
    });

    return ResponseEntity.ok("worked");
}

我可以看到来自MessageHandler的控制台输出返回,但我不知道如何将其传递给父方法,以便返回仅返回ResponseEntity.ok()的内容。

我还不熟悉Java中的WebSocket连接,所以请不要评判我; - )

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

下面的代码将假设{I}方法在WebSocket客户端运行时管理的线程中执行。请检查运行@OnMessage方法的线程。

如果上述前提是正确的话,由全局范围内的线程执行的@OnMessage方法将等待,直到WebSocket响应到达WS客户端线程,该客户端线程将消息重新传递到全局范围线程。然后,控制器类中的执行将继续。

putDataToMicroservice()