如何将 spring-data-rest 与 spring websocket 混合到单个实现中
我想将状态同步到对特定实体更改感兴趣的所有客户端。所以我想实现这样的目标:
- 在实体上公开 CRUD API(通过 和
HTTP/REST
websockets
) - 并将(修改调用的)响应路由到主题
websockets
因此,从技术上讲,我对将spring-data-rest与spring websockets实现相结合的想法很感兴趣,以实现类似spring-data-websocket的东西。
我想到的是两种解决方案,事实上两者都是:
- spring-data-rest 通过以下方式公开我的实体
REST/HTTP API
-
websocket
控制器(用于对实体的修改调用)
控制器将如下所示:websocket
@Controller
public class EntityAWebSocketController {
@MessageMapping("/EntityA/update")
@SendTo("/topic/EntityA/update")
public EntityA update(EntityA entityA) throws Exception {
// persist,....
return entityA;
}
}
场景 1:从 REST/HTTP
API 调用的 Websocket
API
规则:
- 客户端请求始终是
REST/HTTP API
- 响应适用于所有操作
REST/HTTP API
- 此外,为了修改操作,消息也会出现
websocket
从技术上讲,可以通过以下方式实现:
- 从 spring-rest-data 事件(即在 、
websocket
AfterCreateEvent
AfterSaveEvent
AfterLinkSaveEvent
AfterDeleteEvent
)
尽管如此,这个解决方案对我来说似乎很恶心,因为我需要去:
- 客户端 A -- 请求 -- > 服务器(弹簧-数据-休息控制器)
HTTP
- 服务器(弹簧数据休息控制器中的XXX事件之后)-- 消息-->弹簧控制器
websocket
websocket
- 弹簧网络盒控制器 - 通过主题发送消息 - >所有对该主题感兴趣的客户
websocket
- 服务器(弹簧数据休息控制器)--响应-->客户端 A
HTTP
场景 2:独立于 REST API 的 Websocket
API
规则:
- 客户端请求仅用于非修改操作
REST/HTTP API
- 响应仅适用于非修改操作
REST/HTTP API
- 客户端为所有修改操作发送消息
websocket
-
websocket
消息仅针对所有修改操作发送到客户端
好吧,如果没有其他想法出现,我会选择后一个,但是,如果我能以某种方式生成通过暴露的方法,比如spring-data-websockets并且只处理我实现中的路由,那就太好了。C(R)UD
websockets
因为我觉得我必须手动公开(通过s)我所有实体的所有方法。我可能为此太懒了。*WebSocketController
CUD
想法?