还是继续上一篇stomp的问题,这次是在实际使用中又有了新发现,那就是java后端向前端发送stomp消息时,存在底层异步操作造成的消息顺序不确定性问题,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @Autowired SimpMessageSendingOperations messagingTemplate; @MessageMapping ( "/create" ) @SendToUser ( "/queue/reply" ) public ReplyDTO create( @Payload CreateDTO msg, SimpMessageHeaderAccessor accessor) throws Exception { String userId = getUserId(accessor); if (userId.isEmpty()) return buildNotLoggedInReply(accessor); int createId = myService.create(userId, msg.getTypeName()); CreateInfo ci = myService.info(createId); String infoStr = new ObjectMapper().writeValueAsString(ci); messagingTemplate.convertAndSendToUser( Objects.requireNonNull(accessor.getSessionId()), "/queue/response" , buildOkResp(accessor), createHeaders(accessor.getSessionId()) ); return buildReply(accessor, infoStr); } |