gpt4 book ai didi

java - 在 Spring 4.2.4 中禁用 SimpMessageTemplate.sentToUser(...) 中的广播

转载 作者:行者123 更新时间:2023-12-01 09:52:50 25 4
gpt4 key购买 nike

我正在尝试使用同一 Spring Security 用户连接两个 session ,并使用 Spring 4.2.4 订阅同一队列。我想为每个 session 获取单独的消息。使用 @SendToUser 很容易做到,但使用 SimpMessagingTemplate.sendToUser(...) 时似乎并不是那么简单 - 每个 session 都会收到特定于其他 session 的所有消息 session 。

@SendToUser 示例:

@Controller
public class TestController {

@MessageMapping("/queue/hello")
@SendToUser(value = "/queue/hello", broadcast = false)
public String test() {
return Integer.toString(new Random().nextInt());
}

}

SimpMessagingTemplate 示例:

template.convertAndSendToUser("SessionUser{id=123}", "/queue/hello", "test");

我尝试按照此线程中的建议在 header 中添加 sessionId: sending-error-message-in-spring-websockets不幸的是,它在这个版本的 Spring 中没有帮助。有人有什么想法吗?

最佳答案

似乎在 header 中设置 session ID 仍然有效,但它必须是 simpSessionId,而不是 sessionId。我对问题出在哪里的假设都是错误的。总而言之,我们可以使用这个重载方法:

simpMessagingTemplate.convertAndSendToUser("SessionUser{id=123}", "/queue/hello", "test", headers);

标题的创建者:

private MessageHeaders createHeaders(String sessionId) {
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(sessionId);
headerAccessor.setLeaveMutable(true);
return headerAccessor.getMessageHeaders();
}

要访问 simpSessionId,我们应该使用:

SimpMessageHeaderAccessor.getSessionId(message.getHeaders())

希望这对某人有用。

关于java - 在 Spring 4.2.4 中禁用 SimpMessageTemplate.sentToUser(...) 中的广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com