gpt4 book ai didi

Spring web socket消息传递 - 订阅和发送初始消息

转载 作者:行者123 更新时间:2023-12-03 17:16:53 33 4
gpt4 key购买 nike

使用用于 Web 套接字消息传递的 Stomp 代理中继,我可以订阅目标 /topic/mydest .这将创建一个代理订阅并接收系统中的某些内容为此代理目标触发的所有消息,当系统中发生某些事件时会发生这种情况。

我可以订阅目的地 /app/mydest ,以及带有 @SubscribeMapping("mydest") 的 Controller 方法将被调用,并且返回值仅作为消息在此套接字上发回。据我所知,这是此订阅将发送的唯一消息。

有没有办法将其合并到单个订阅中,即为某个 /topic 创建代理订阅目的地,并触发一些直接将消息发送回订阅者的代码?

用例:当系统发生错误时,将带有当前错误计数的消息发送到 /topic/mydest .当新客户订阅时,我只想向他发送最后已知的错误计数。其他人此刻不感兴趣,因为计数没有改变。

我目前的解决方案是同时订阅 /app/mydest/topic/mydest并在客户端使用相同的消息处理程序。但它确实是一种逻辑订阅,并且它有点容易出错,因为客户端需要记住同时订阅两者。

在这种情况下,我的问题是:/app/ 还会有进一步的消息吗?订阅?有什么可以调用来触发的吗?我还能如何向订阅者发送主题的初始信息,而不向现有订阅者发送冗余消息?

根据要求,这是我的 Websocket 配置类。

@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/queue/", "/topic/", "/exchange/");
registry.setApplicationDestinationPrefixes("/app");
}
}

最佳答案

您可以使用 ApplicationListenerSessionSubscribeEvent .
例子:

@Component
public class SubscribeListener implements ApplicationListener<SessionSubscribeEvent> {

private final SimpMessagingTemplate messagingTemplate;

@Autowired
public SubscribeListener(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}

@Override
public void onApplicationEvent(SessionSubscribeEvent event) {
messagingTemplate.convertAndSendToUser(event.getUser().getName(), "/topic/mydest", "Last known error count");
}
}

关于Spring web socket消息传递 - 订阅和发送初始消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42040822/

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