2

配置 WebSocketMessageBroker

public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/queue");
    registry.setApplicationDestinationPrefixes("/app");
}

连接目的地成功

订阅

编号:sub-0

目的地:/用户/队列/机器人

并从服务器端返回订阅事件

SessionSubscribeEvent[GenericMessage [payload=byte[0], headers={simpMessageType=SUBSCRIBE, stompCommand=SUBSCRIBE, nativeHeaders={id=[sub-0], destination=[/user/queue/bot]}, simpSessionAttributes={}, simpHeartbeat=[J@2881ad6c, simpSubscriptionId=sub-0, simpSessionId=l4lyrtxo, simpDestination=/user/queue/bot}]]

simpDestionation为/ user /queue/bot

让我们尝试向这个目的地发送消息

template.convertAndSendToUser(user, "/queue/bot", new UserResponse(UUID.randomUUID().toString()));

其中用户是当前的simpSessionId来自:

SessionConnectedEvent[GenericMessage [payload=byte[0],headers={simpMessageType=CONNECT_ACK,simpConnectMessage=GenericMessage [payload=byte[0],headers={simpMessageType=CONNECT,stompCommand=CONNECT,nativeHeaders={accept-version=[1.1, 1.0],心跳=[10000,10000]},simpSessionAttributes={},simpHeartbeat=[J@1f44ec3d,simpSessionId=l4lyrtxo}],simpSessionId=l4lyrtxo}]]

但是此消息在客户端不可用

客户端通过以下代码订阅:

stompClient.subscribe('/user/queue/bot', function (greeting) {
            console.log(greeting);
        });

如何从队列目的地获取消息?

我试图集思广益,并在 Spring 的 SimpMessagingTemplate 类中发现以下内容:

super.convertAndSend(this.destinationPrefix + user + destination, payload, headers, postProcessor);

这意味着,最终目的地是/user/[simpSessionId]/queue/bot还是 no ?

通过 VM -Dlogging.level.org.springframework=TRACE 登录

2020-02-14 18:42:46.281 TRACE 20460 --- [nio-8080-exec-7] o.s.w.s.m.StompSubProtocolHandler        : From client: SUBSCRIBE /queue/test id=sub-0 session=d2cjojbp
2020-02-14 18:42:46.287 DEBUG 20460 --- [nboundChannel-5] o.s.m.s.b.SimpleBrokerMessageHandler     : Processing SUBSCRIBE /queue/test id=sub-0 session=d2cjojbp
2020-02-14 18:42:47.509 TRACE 20460 --- [MessageBroker-1] o.s.m.s.u.UserDestinationMessageHandler  : No active sessions for user destination: /user/d2cjojbp/queue/test
4

0 回答 0