使用 WebSocketStompClient 在 Spring 中订阅用户 STOMP 端点

问题描述 投票:0回答:0

我的 Spring STOMP 客户端没有从我的 Spring STOMP 服务器获取消息。 我已经浏览了this文章,但它与 JS 客户端有关,我希望 WS 客户端解析引擎盖下的路径。至少我没有在文档中找到任何关于这种特殊标题处理的内容。

客户端配置:

    @Bean
WebSocketStompClient client(StompSessionHandler handler){
    WebSocketStompClient webSocketStompClient = new WebSocketStompClient(
            new StandardWebSocketClient()
    );

    webSocketStompClient.setMessageConverter(new MappingJackson2MessageConverter());
    String url = "ws://localhost:8080/stomp";

    WebSocketHttpHeaders webSocketHttpHeaders = new WebSocketHttpHeaders();
    String auth = "user1" + ":" + "password";
    webSocketHttpHeaders.add("Authorization", "Basic " + new String(Base64.getEncoder().encode(auth.getBytes())));

    webSocketStompClient.connectAsync(url, webSocketHttpHeaders, handler);

    return webSocketStompClient;
}

@Bean
StompSessionHandler handler(){
    return new StompSessionHandler() {
        @Override
        public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
            log.info("Subscribe...");
            session.subscribe("/user/queue/messages", this);
        }

服务器配置:

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

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
     registry.addEndpoint("/stomp").setAllowedOrigins("*");
}

发送信息:

this.template.convertAndSendToUser("user1","/queue", new OutputMessage("Svr", "To USER1: =====>> ", ldt));

从日志来看,恰好订阅了

/队列用户63d10e29-8327-476f-b3ce-e830e5ae733a

Processing SUBSCRIBE destination=/queue-user63d10e29-8327-476f-b3ce-e830e5ae733a subscriptionId=1 session=63d10e29-8327-476f-b3ce-e830e5ae733a payload=byte[0]
我也跟着在服务器端执行了
convertAndSendToUser
。最终路径:

/用户/用户1/队列

当我使用会话 ID 和 convertAndSend 时:

this.template.convertAndSend("/queue-user63d10e29-8327-476f-b3ce-e830e5ae733a", new OutputMessage("Svr", "To USER1: =====>> ", ldt));

,它从服务器端发送消息,但客户端没有收到。

spring-boot websocket stomp
© www.soinside.com 2019 - 2024. All rights reserved.