Spring websocket Spring WebSocket ConvertAndSendToUser不工作,但convertAndSend工作

Spring websocket Spring WebSocket ConvertAndSendToUser不工作,但convertAndSend工作,spring-websocket,stomp,Spring Websocket,Stomp,我不熟悉Spring boot websocket和消息传递语义。目前,我可以使用以下代码发送私人消息 String queueName = "/user/" + username + "/queue/wishes"; simpMessagingTemplate.convertAndSend(queueName, message); 当尝试使用convertAndSendToUser时,我没有收到任何错误,但是消息没有被发送。我知道,使用sendToUser时,应该对目的地名称的形成方式做一

我不熟悉Spring boot websocket和消息传递语义。目前,我可以使用以下代码发送私人消息

String queueName = "/user/" + username  + "/queue/wishes";
simpMessagingTemplate.convertAndSend(queueName, message);
当尝试使用convertAndSendToUser时,我没有收到任何错误,但是消息没有被发送。我知道,使用sendToUser时,应该对目的地名称的形成方式做一些细微的更改,但我没有弄清楚

String queueName = "/user/queue/wishes";
        simpMessagingTemplate.convertAndSendToUser(username, queueName, message);
下面是我的订阅代码

 stompClient.subscribe('/user/queue/wishes', function(message) {
            alert(message);
        }) 

由于您的“目的地”即“队列名称”不正确,因此无法发送。 如您所见,这是在调用
template.convertAndSendToUser()
时作为链的一部分调用的方法

此方法已将
/user
作为最终目标的前缀。因此,你应该这样做:
SimpMessageTemplate.convertAndSendToUser(用户名,“/queue/wishes”,消息)

现在有了正确的目的地,它应该被发送给用户

我有一个类似的问题,如果您的
用户名
实际上是一个
sessionId
,那么请尝试使用一个重载的方法来接受标题(在javadoc中是这样说的):


终于解决了问题。我犯了一个愚蠢的错误。我是作为WebSocket配置的一部分填充用户DestinationPrefix的。但是没有为注入的bean SimpMessage模板设置它。

没有。它仍然不工作。最初,我将“/user”添加到目的地,但它不适用于“/queue/wisks”目的地。
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(username);
headerAccessor.setLeaveMutable(true);

messagingTemplate.convertAndSendToUser(username, "/queue/wishes", message, headerAccessor.getMessageHeaders());