Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between @EnableWebSocket and @EnableWebSocketMessageBroker

I want to enable sockets in a Spring application and in the documentation came up 2 ways of using them, plain and with STOMP enabled.

I understand that the later is backed up by a message broker but did not find any good explanation of this feature.

So, my question would be, what does Spring bring in the back scenes when @EnableWebSocketMessageBroker is used, compared to @EnableWebSocket ?

like image 939
Victor Avatar asked Jul 23 '18 08:07

Victor


1 Answers

From what I have read so far, the difference consists in the fact that the later (@EnableWebSocketMessageBroker) offers a better handling for the exchanged messages. In order to keep them somehow in controll, a very good approach is to use a message broker:

  • easy to broadcast to intersted parts. Otherwise you have to keep trace of session and to iterate through them in order to send a message to each client who is interested
  • assuring the message got to the client. Out of the box, a message broker offers acknowledgement flags that will be interchanged between client and server in order to assure the message transmission and interception

Note: the annotation @EnableWebSocketMessageBroker does not by default add an underlying full-featured Broker, but a "Simple one". The simple version:

  • supports subset of STOMP: SUBSCRIBE, UNSUBSCRIBE, MESSAGE
  • no acks, receipts, transactions
  • simple message sending loop
  • not suitable for clustering

A full-featured one will add more functionalities, that can be found on its presentation documentation. (read more in http://rstoyanchev.github.io/s2gx2013-websocket-browser-apps-with-spring)

Other nice to read reference: Message queues vs sockets, The MessageBroker WebSocket Subprotocol

like image 132
Victor Avatar answered Oct 10 '22 06:10

Victor