Home > Net >  Is there a way to send websocket message from regular method in spring
Is there a way to send websocket message from regular method in spring

Time:04-05

I am building web application. There are admin and user roles provided. When user making some action admin is recieving a message that something happened. Websocket connection establishing when user logged. Is there a way to not create ws connection for user and use only HHTP protocol to sending message and send WS message from controller method only?

Now i have theese settings:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

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

    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").setAllowedOriginPatterns("*").withSockJS();
    }
}
@Controller
public class NotificationController {
    @MessageMapping("/notification")
    @SendTo("/topic/test")
    public Notification getNotification(Notification notification) {
        return notification;
    }
}

CodePudding user response:

Yes it is possible.
You have to inject SimpleMessagintTemplate, with @Autowire or with constructor.

private final SimpMessagingTemplate simpMessagingTemplate;
public ConstructorName(SimpMessagingTemplate simpMessagingTemplate){
    this.simpMessagingTemplate = simpMessagingTemplate;
}

In your controller, or function where you want to send the message to the client use the convertAndSendToUser function.

simpMessagingTemplate.convertAndSendToUser("userId","/private", messageData);

On javascript client side.

var Sock = new SockJS('http://localhost:8080/ws');
stompClient = over(Sock);
stompClient.connect({}, onConnected, one rror);

stompClient.subscribe('/topic/'   userId   '/private', onMessageReceived);
  • Related