java - Come mescolare il supporto a molla con la ragnatela a molla in un'unica implementazione


0 Answers

java spring spring-mvc websocket spring-data-rest

Mi piacerebbe sincronizzare lo stato con tutti i client interessati a particolari cambiamenti di entità. Quindi mi piacerebbe ottenere qualcosa come:

  • esposizione dell'API CRUD sull'entità (tramite HTTP/REST e websockets )
  • e instradare la risposta (delle chiamate modificanti) all'argomento websockets

Quindi, tecnicamente, sarei interessato alle idee per combinare il salvataggio dei spring-data-rest primaverili con l' implementazione delle websocket primaverili per ottenere qualcosa come spring-data-websocket.

Ci sono due soluzioni che mi vengono in mente, e in effetti entrambe sarebbero:

  • spring-data-rest per esporre le mie entità tramite REST/HTTP API
  • controller websocket (utilizzati per le modifiche chiamate su entità)

I controller websocket dovrebbero essere come questo:

@Controller
public class EntityAWebSocketController {
      @MessageMapping("/EntityA/update")
      @SendTo("/topic/EntityA/update")
      public EntityA update(EntityA entityA) throws Exception {
           // persist,....
           return entityA;
     }
}

Scenario 1: Websocket API chiamata da REST/HTTP API

Regole:

  • la richiesta del client è sempre REST/HTTP API
  • la risposta è REST/HTTP API per tutte le operazioni
  • inoltre per modificare le operazioni viene anche il messaggio websocket

Tecnicamente, potrebbe essere raggiunto, da:

  • chiamare i controller websocket dagli eventi spring-rest-data (ovvero in AfterCreateEvent , AfterSaveEvent , AfterLinkSaveEvent , AfterDeleteEvent )

Comunque la soluzione mi sembra abbastanza malata , come avrei bisogno di fare per:

  1. client A - Richiesta HTTP -> Server (spring-data-rest controller)
  2. Server (AfterXXXEvent nel controller dati a molla) - messaggio websocket -> controller websocket Spring
  3. Controller websocket di primavera - messaggio websocket via argomento -> tutti i clienti interessati all'argomento
  4. Server (spring-data-rest controller) - Risposta HTTP -> client A

Scenario 2: Websocket API indipendente REST API

Regole:

  • la richiesta del client è REST/HTTP API per le operazioni che non modificano
  • la risposta è REST/HTTP API per le operazioni che non modificano
  • il client invia websocket messaggio websocket per tutte le operazioni di modifica
  • websocket messaggio websocket viene inviato al client solo per tutte le operazioni di modifica

Bene, se non ci fossero altre idee, andrei a fare le successive, ma comunque sarebbe bello se potessi avere in qualche modo generato i metodi C(R)UD esposti tramite websockets , qualcosa come Spring-Data-Websockets e gestisci solo i percorsi nella mia implementazione.

Poiché ritengo di dover esporre manualmente (tramite *WebSocketController s) tutti i metodi CUD per tutte le mie entità. E potrei essere troppo pigro per quello.

Idee?



Related