gpt4 book ai didi

spring - 如何在 Spring ApplicationListener (SessionConnectedEvent) 中发送消息

转载 作者:行者123 更新时间:2023-12-02 06:26:17 24 4
gpt4 key购买 nike

我使用 Stomp over SockJS 和 Spring 消息传递。当新用户连接时,我试图向所有登录的用户发送消息。首先,这是我的听众:

@Component
public class SessionConnectedListener implements ApplicationListener<SessionConnectedEvent> {

private static final Logger log = LoggerFactory.getLogger(SessionConnectedListener.class);

@Autowired
private SimpMessagingTemplate template;

@Override
public void onApplicationEvent(SessionConnectedEvent event) {
log.info(event.toString());

// Not sure if it's sending...?
template.convertAndSend("/topic/login", "New user logged in");
}

}

我的 WebSocket 配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("chat").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic", "/queue");
config.setApplicationDestinationPrefixes("/app");
}

}

我的 JS 配置

var socket = new SockJS('/chat');
stompClient = Stomp.over(socket);

stompClient.connect({}}, function(frame) {

// ... other working subscriptions

stompClient.subscribe("/topic/login", function(message) {
console.log(message.body);
});

});

我的问题是我的 template.convertAndSend()ApplicationListener 中不起作用。但是,如果我将其放入用 @MessageMapping 注释的 Controller 方法中,它将起作用,并且我将拥有一个控制台日志客户端。

所以我的问题是:template.convertAndSend()可以在ApplicationListener中工作吗?如果是这样,怎么办?或者我错过了什么?

感谢您的帮助!

PS:我的log.info(event.toString());在 ApplicationListener 中工作,所以我知道我正在进入 onApplicationEvent() 方法。

最佳答案

使用 ApplicationListener 中的模板发送消息应该可以。请检查这个Spring WebSocket Chat示例示例。

关于spring - 如何在 Spring ApplicationListener (SessionConnectedEvent) 中发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898449/

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