gpt4 book ai didi

Java StompSession 发送消息 - Spring Boot

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:17 34 4
gpt4 key购买 nike

我正在尝试在两个 Spring Boot 应用程序之间建立 websocket 连接;我在这里遵循示例代码:https://github.com/eugenp/tutorials/blob/master/spring-boot-client/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java

由此看来,这部分对我来说效果很好:

 @Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
logger.info("New session established : " + session.getSessionId());
session.subscribe("/topic/messages", this);
logger.info("Subscribed to /topic/messages");
session.send("/app/chat", getSampleMessage());
logger.info("Message sent to websocket server");
}

但是,我不知道如何在 afterConnected 函数之外重用 session.send() 。换句话说,我想要一个如下所示的函数:

void sendMessage(String message){
session.send("/app/chat", message);
}

最佳答案

我也遇到了同样的问题,我想在这篇文章中分享我的解决方案。我已经实现了一个配置类,该类公开带有 bean 的 StompSession,该 bean 可以作为服务注入(inject)到另一个组件中。

@Configuration
@RequiredArgsConstructor
public class WebSocketClientConfig {

private static final Logger logger = LoggerFactory.getLogger(WebSocketClientConfig.class);

/**
* Provide Stomp Session Handler
*
* @return
*/
@Bean
protected StompSessionHandler provideStompSessionHandler() {
return new WebSocketStompSessionHandler();
}

/**
* Provide WebSocket Client
*
* @return
*/
@Bean
protected WebSocketClient provideWebSocketClient() {
return new StandardWebSocketClient();
}

/**
* Provide StompSession session
*
* @param sessionHandler
* @param webSocketClient
* @return
* @throws java.lang.InterruptedException
* @throws java.util.concurrent.ExecutionException
*/
@Bean
protected StompSession provideStompSession(
final StompSessionHandler sessionHandler,
final WebSocketClient webSocketClient
) throws InterruptedException, ExecutionException {
final WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
return stompClient.connect("ws://localhost:8080/messages", sessionHandler).get();
}
}

现在我可以在 afterConnection 之外使用 StomSession:

@Service
@RequiredArgsConstructor
public class PublishMessageServiceImpl implements IPublishMessageService {

/**
* Stomp Session
*/
private final StompSession stompSession;

/**
*
* @param message
*/
@Override
public void publish(final PublishMessageDTO message) {
Assert.notNull(message, "Message can not be null");
stompSession.send("/topic/message", message);
}

}

希望它对某人有用,问候

关于Java StompSession 发送消息 - Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55972350/

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