Closed msh01 closed 6 years ago
找到答案了:
在后端代码里面全局搜索/user
,发现/user
出现在了spring
的SimpMessagingTemplate
类的源码中,这个类里面有个属性:
private String destinationPrefix = "/user/";
我想,我大概找到问题的方向了。。。。
原来在方法调用的时候,传入的destination参数
是"/queue/chat"
:
messagingTemplate.convertAndSendToUser(destUser, "/queue/chat", new ChatResp(message, principal.getName()));
然而在SimpMessagingTemplate的方法内,destination参数
会被再次经过加工:
super.convertAndSend(this.destinationPrefix + user + destination, payload, headers, postProcessor);
最后真正的destination
会是this.destinationPrefix + user + destination
,例如"/queue/chat"
→"/user/libai/queue/chat"
下面的这行代码看不懂,为什么是
/user/queue/chat
,而不是/queue/chat
?这个
/user
前缀是哪儿来的?后端配置的是只能识别/queue
开头的或者/topic
开头的,为什么/user/queue
开头的也能识别?百思不得其解