【发布时间】:2021-03-15 14:34:36
【问题描述】:
我成功订阅了一个队列,但是发送消息时,另一个用户没有收到它
消息代理配置:
override fun configureMessageBroker(config: MessageBrokerRegistry) {
config.enableSimpleBroker("/queue", "/topic")
config.setApplicationDestinationPrefixes("/app")
}
我如何发送消息
messageTemplate.convertAndSendToUser(recipientId.toString(), "/queue/chat", message)
在 ws 连接上创建自定义用户主体
override fun preSend(message: Message<*>, channel: MessageChannel): Message<*>? {
val accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor::class.java)
if (accessor != null && StompCommand.CONNECT == accessor.command) {
val customPrincipal = CustomPrincipal(userId)
val authentication = CustomAuthToken(customPrincipal, roles)
accessor.user = authentication
return MessageBuilder.createMessage(message.payload, accessor.messageHeaders)
}
return message
}
}
在客户端我连接套接字
this.stompClient.connect(headers, () => {
this.stompClient.subscribe(headers, "/user/queue/chat", (message) => {
console.log("connected");
console.log(message);
});
});
当我连接到 stomp 时,我会在浏览器控制台中看到下一条消息
<<< CONNECTED
user-name:1
heart-beat:0,0
version:1.2
content-length:0
user-name 是该用户的实际 ID
我将 ID 为 1 的用户和 ID 为 2 的用户订阅到同一个队列,当我从用户 1 向用户 2 发送消息时,第二个用户没有收到它。
我错过了什么吗?
【问题讨论】:
标签: spring spring-boot websocket spring-websocket