我遇到的问题是客户端没有接收到发送到用户目的地的stomp消息。让我解释一下:
在WebSocketMessageBrokerConfigure中:
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/secured/topic", "/secured/user/queue");
config.setUserDestinationPrefix("/secured/user");
..
在我的stompjs客户端(以“admin”登录):
stompClient.subscribe('/secured/user/queue/notifications'
, function (output) {
console.log(output);
});
在日志中:
Processing SUBSCRIBE /secured/user/queue/notifications id=sub-0 session=d74f49b3-bb63-580f-b862-81647cc712b3
以及发送消息的java代码:
simpMessagingTemplate.convertAndSendToUser(
"admin", "/secured/user/queue/notifications", out);
这将导致日志:
Processing MESSAGE destination=/secured/user/queue/notifications-userd74f49b3-bb63-580f-b862-81647cc712b3 session=null payload={"from":"server","text":"hello","recipient":"admin","time":"13:29:10"}
-
但控制台日志中没有打印任何消息。
如您所见,sessionid在subscribe和send步骤中是相同的。但我不明白为什么客户没有收到信息。请注意,没有用户目标的消息工作正常。
有人能帮我一把吗?
2条答案
按热度按时间a9wyjsp71#
我尝试了很多不同的方法,但我不知道为什么,但我没有抱怨。我所做的:
在configuremessagebroker(WebSocketMessageBrokerConfigure)中(这让我非常困惑,与我读到的所有示例都不符):
convertandsendtouser(convertandsendtouser添加了“/secured/user”+用户名):
以及我在客户机上的订阅(不太喜欢在这里添加用户名…):
但它是有效的;-)
[编辑]跟踪日志记录使您更容易了解发生了什么:
nkkqxpd92#
也许您应该创建自己的用户主体模型类来确定它是否有这样的正确用户名。
你也应该创建一个
DefaultHandshakeHandler
实现以您选择的名称创建用户。最后加上这个
CustomHandshakeHandler
类到setHandshakeHandler
方法如下