Spring boot Spring引导:当新消息到达时通知用户

Spring boot Spring引导:当新消息到达时通知用户,spring-boot,spring-websocket,stomp,Spring Boot,Spring Websocket,Stomp,应用程序从一个特定用户接收一条新消息给另一个特定用户。如果收件人“在线”,则应通知他们有新邮件。如果他们希望获得消息,他们将通过http手动请求消息 我尝试了多种URL组合,但似乎无法让服务器通知用户。到目前为止,我提供的代码都是空白的,我不知道该写什么 这是我的WebSocketMessageBrokerConfiguration类: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implem

应用程序从一个特定用户接收一条新消息给另一个特定用户。如果收件人“在线”,则应通知他们有新邮件。如果他们希望获得消息,他们将通过http手动请求消息

我尝试了多种URL组合,但似乎无法让服务器通知用户。到目前为止,我提供的代码都是空白的,我不知道该写什么

这是我的WebSocketMessageBrokerConfiguration类:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("? ? ?");
        config.setApplicationDestinationPrefixes("? ? ?");
        config.setUserDestinationPrefix("? ? ?");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry
                .addEndpoint("/chat-notify")
                .setAllowedOrigins("*")
                .withSockJS();
    }
}
这是接收消息的控制器,在将其存储在数据库中后,应通知收件人:

@Autowired
private SimpMessagingTemplate webSocket;

@PostMapping
@PreAuthorize("isAuthenticated()")
public ResponseEntity<?> send(@RequestBody @Valid NewMessageDTO dto, @ApiIgnore Authentication auth) {
    User user = userService.getLoggedInUser(auth);
    Message message = messageService.messageFromNewMessageDTO(dto, user);
    messageService.save(message);

    webSocket.convertAndSendToUser("? ? ?", "? ? ?", "new message arrived");

    return new ResponseEntity<>(HttpStatus.CREATED);
}
@Autowired
私有SimpMessageTemplateWebSocket;
@邮戳
@预授权(“isAuthenticated()”)
公共响应发送(@RequestBody@Valid NewMessageDTO dto,@apignore Authentication auth){
User User=userService.getLoggedInUser(auth);
Message Message=messageService.messageFromNewMessageDTO(dto,用户);
messageService.save(message);
webSocket.convertandsendouser(“???”、“???”、“新消息到达”);
返回新的ResponseEntity(HttpStatus.CREATED);
}
这是一个简单的html文件,其中包含一些javascript,可以测试这一点:

<html>

  <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.1/dist/sockjs.min.js"></script>
  <script src="stomp.js"></script>
  

  <script type="text/javascript">

    var socket = new SockJS('http://localhost:8080/chat-notify');
    var stompClient = Stomp.over(socket);
    stompClient.connect({ }, function(frame) {
            stompClient.subscribe("? ? ?", function(data) {
                console.log(data);
            });

    });
  </script>

</html>

var socket=new SockJS('http://localhost:8080/chat-通知);;
var stompClient=Stomp.over(套接字);
stompClient.connect({},函数(框架){
stompClient.subscribe(“???”),函数(数据){
控制台日志(数据);
});
});