Jak zadowola Cię synchroniczna komunikacja (request - response) to warto pomyśleć o REST: po co kombinować? Jak potrzebuejsz asynchronicznych powiadomień (jednostronnie) np. tych w stylu twittera to warto pomyśleć o Server Sent Events.
https://jersey.java.net/documentation/latest/sse.html
Korzystałem z tej implementacji SSE i działało. Konfiguracja jest badzo prosta, dokumentacja dobra.
Jeśli potrzebujesz kolejek (messaging) lub np. subskrybować pewien kanał przez wielu użytkowników (z obsługą opcjonalną transakcji, czy klient odebrał) dobrym wyborem może być STOMP. Można do tego celu użyć np. ActiveMQ. Większość brokerów w tej chwili ten tekstowy protokół jako alternatywa dla ciężkich, binarnych AMQP i JMS.
https://stomp.github.io/
STOMP zwykle używany jest przez WebSocket (jako transport layer): http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
Wzbogaca to możliwości protokołu WebSockets, który jest bardzo surowy i prosty (tylko cztery zdarzenia close, open, error, message).
Jak ma się to bezproblemowo tunelować przez proxy / firewalle to warto rozważyć Server Sent Events / REST.
W 90% prostych aplikacji jak udostępnianie bez danych np. klientowi mobilnemu zwykły REST daje rade.