You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket ConvertAndSendUser无法向指定用户发送消息求助

直播竞拍WebSocket通知收不到问题排查与解决

以下是针对你遇到的问题的排查方向和解决方案:

1. 消息代理配置冲突

你的configureMessageBroker中启用了/user作为SimpleBroker的监听前缀,但Spring WebSocket的用户目标(User Destination)是由UserDestinationMessageHandler专门处理的,不需要SimpleBroker直接监听/user前缀。这会导致消息路由逻辑冲突,无法正确将私人消息推送到对应用户。

修改配置:

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    // 移除/user前缀,只保留topic和queue
    config.enableSimpleBroker("/topic","/queue");
    config.setApplicationDestinationPrefixes("/app");
    config.setUserDestinationPrefix("/user");
}

2. 确认Principal与winnerId的一致性

虽然浏览器WS显示user-name为3,但需要确保:

  • CustomHandshakeHandler的determineUser方法返回的Principal的getName()结果是字符串"3"(和String.valueOf(winnerId)完全匹配)
  • 排查userClientService.getUserIdFromToken是否确实返回了正确的userId,可添加日志打印验证:
    String userId = userClientService.getUserIdFromToken(jwtToken);
    System.out.println("Authenticated user ID: " + userId); // 确认输出是"3"
    return () -> userId;
    

3. 检查消息发送模板类型

确保你使用的messagingTemplate是Spring WebSocket专用的SimpMessagingTemplate,而非普通的MessagingTemplate。普通模板无法正确处理WebSocket的用户目标路由逻辑。

4. 前端订阅时机验证

确认前端是在Stomp连接成功后才执行订阅操作,避免因连接未就绪导致订阅无效:

stompClient.connect({}, (frame) => {
    console.log('Connected: ' + frame);
    // 连接成功后再执行订阅
    stompClient.subscribe('/user/queue/notifications', (message) => {
        console.log("inside")
        const notification = JSON.parse(message.body);
        console.log("notification",notification)
        if (notification.type === "AUCTION_WON") {
            alert(notification.message);
        }
    });
}, (error) => {
    console.error('Connection error:', error);
});

5. 消息序列化排查

确认BidMessage类支持JSON序列化,比如添加Jackson注解(若使用默认序列化机制):

import com.fasterxml.jackson.annotation.JsonProperty;

public class BidMessage {
    @JsonProperty("type")
    private String type;
    @JsonProperty("message")
    private String message;
    @JsonProperty("productId")
    private Long productId;

    // 构造方法、getter/setter
}

序列化异常可能导致消息在后端发送环节被丢弃,可通过后端日志排查是否有相关报错。

内容的提问来源于stack exchange,提问作者Yoey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:18:33