Spring WebSocket STOMP消息代理无法广播消息求助
Spring WebSocket STOMP消息代理无法广播消息求助
各位大佬,我已经卡了好几个小时在WebSocket STOMP消息代理的问题上,试了各种办法都找不到解决方案。跟着YouTube上的教程和Spring官方文档一步步操作,但就是没效果。目前我能成功订阅目标地址,也能给服务器发送消息(服务器确实能收到),但不管是尝试把消息发给特定客户端,还是广播给所有连接的客户端,都完全没反应。
客户端代码
WebSocketStompClient stompClient = new WebSocketStompClient(new StandardWebSocketClient()); stompFriendRequestsHandler = new WebsocketHandler(); WebSocketHttpHeaders stompFriendRequestHeader = createWebsocketHeader(headerForFriendRequestStomp); System.out.println(stompFriendRequestHeader); stompClient.connect("ws://localhost:8080/ws", stompFriendRequestHeader, stompFriendRequestsHandler); StompSession session = stompFriendRequestsHandler.getSession(); session.subscribe("/all/messages", new StompFrameHandler() { @Override public Type getPayloadType(StompHeaders headers) { System.out.println("getPayLoadType!"); return String.class; } @Override public void handleFrame(StompHeaders headers, Object payload) { System.out.println("YAY! We got the broadcast"); System.out.println(payload); } }); ObjectMapper objectMapper = new ObjectMapper(); ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put("friendRequestUsername", 1); try { byte[] payload = objectMapper.writeValueAsBytes(objectNode); stompFriendRequestsHandler.getSession().send("/app/application", payload); } catch (JsonProcessingException e) { throw new RuntimeException(e); }
服务器端消息处理方法
这段代码里的打印语句能正常输出,说明服务器确实收到了客户端的消息,并且映射到了正确的方法:
@MessageMapping("/application") @SendTo("/all/messages") public Message send(final Message message)throws Exception{ System.out.println("BROADCASTER"); System.out.println(message); return message; }
服务器端配置类
@Configuration @EnableWebSocketMessageBroker @ComponentScan(basePackages = {"com/swoosh/springbootchatapp/chatapp/friend/system/stomp/friendrequest/controller"}) public class StompConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry){ registry.addEndpoint("/ws").setAllowedOrigins("*"); //.setHandshakeHandler(new StompHandshakeHandler()); } @Override public void configureMessageBroker(MessageBrokerRegistry registry){ registry.enableSimpleBroker("/all", "/specific"); registry.setApplicationDestinationPrefixes("/app"); } }
现在的问题是:客户端订阅了/all/messages,而且能触发getPayloadType方法(控制台能打印getPayLoadType!),但handleFrame里的内容完全没输出,客户端根本收不到服务器广播回来的消息。有没有大佬能帮忙看看哪里出问题了?
备注:内容来源于stack exchange,提问作者Ponta
相关产品推荐
相关产品推荐

