我正在尝试在两个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);
}
答案 0 :(得分:0)
为了在afterConnected函数之外使用Session.send。您需要存储调用时返回的Session变量。 StompClient.connect()
喜欢
StompSession session = stompClient.connect(URL, sessionHandler).get();
并像使用它
session.send("/app/chat", message);
我希望这能回答您的问题
答案 1 :(得分:0)
我遇到了同样的问题,我想在这篇文章中分享我的解决方案。我实现了一个配置类,该类使用Bean公开了StompSession,可以将Bean作为服务注入到另一个组件中。
@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);
}
}
现在,我可以在afterConnection之外使用StomSession:
"stringify"
我希望这对某人有用,