stompjs如何在发送消息后获取状态

stompjs how to get status after sending message

我正在使用 spring 启动 websocket、STOMP 和 stompjs 创建一个聊天应用程序,这是我的 js 代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.4/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
<script>
    //some code

    //send message
    stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage));
</script>

后端代码:

@MessageMapping("/chat.sendMessage")
public MessageDTO sendMessage(@Payload MessageDTO chatMessage) {
    //HERE
    if(!validatorService.validate(chatMessage)) {
        throw new RuntimeException("invalid");
    }
    messagingTemplate.convertAndSend("/topic/public", chatMessage);
    return chatMessage;
}

你可以看到我return的消息。在 js 端无论如何都可以接收这个对象,比如

stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage), callback);

当 STOMP 客户端发送 MESSAGE 帧时,它通常根本不会从代理那里得到任何响应。但是,如果 MESSAGE 帧包含 receipt header,它 可能 返回 RECEIPT frame。你没有设置这个 header 所以你不应该期望从经纪人那里得到任何回应。

如果您想获得某种 application-specific 响应,则需要在 JavaScript 应用程序中创建一个订阅者,并且 server-side 应用程序需要向无论消费者在哪里收听。这是经典request/reply messaging pattern.