我的 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));
,它从服务器端发送消息,但客户端没有收到。