Java StompSession发送消息-Spring Boot

时间:2019-05-03 14:54:56

标签: java spring spring-boot websocket stomp

我正在尝试在两个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);
}

2 个答案:

答案 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"

我希望这对某人有用,