【问题标题】:Realtime connection (SockJS/Socket.io) and Microservice application实时连接(SockJS/Socket.io)和微服务应用
【发布时间】:2016-01-27 18:01:10
【问题描述】:

目前我正在微服务架构中构建应用程序。

第一个应用程序是一个API,它执行用户身份验证,接收请求以启动/保持与用户的实时连接(通过 Socket.io 或 SockJS),系统将套接字 ID 存储到用户对象。

第二个应用程序是一个WORKER做一些事情,有时他必须向用户发送实时数据。

问题是:第二个应用程序(WORKER)应该如何向用户发送实时数据?

WORKER 是否应该向 API 发送消息,然后 API 将此消息转发给用户? 或者 WORKER 可以直接将消息发送给用户?

谢谢

【问题讨论】:

  • 在第一个场景中,用户需要一个与 APi 和 worker 的活动套接字连接。在第二种情况下,它只需要一个 API。此外,如果 Worker 可以直接发送给用户,您很可能需要在 API 和 Worker 上复制所有用户身份验证和管理。
  • 最后我实现了第三个服务来处理所有的 websockets 连接。然后 API 和 Workers 可以通过内部的 pubsub 系统发送 websockets 消息与 Websocket 服务通信。

标签: session socket.io real-time microservices sockjs


【解决方案1】:

在一个完美世界的例子中,负责发送“发布”实时推送通知的服务应该与其他服务分开。由于微服务是一组狭隘相关的方法,认证“用户”服务和实时推送通知服务之间没有任何关系。深入分析一下,身份验证实际上是一项单独的服务,仅供参考,您这样做可能是有原因的。

服务将如何通信?实际上有很多方法可以实现服务之间的内部通信,MQ 解决方案可以为您的堆栈添加更多技术,例如 Rabbit MQ、Beanstalk、Gearman 等...

您也可以在 HTTP 协议之上进行通信,但您需要考虑 HTTP 调用会增加更多成本。

完美的解决方案是每个服务都必须有接口来代表它们执行,HTTP 接口和一个 MQ 接口(控制台)

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 2021-08-13
    • 2018-12-23
    • 1970-01-01
    • 2014-01-03
    • 2016-12-15
    • 2021-11-01
    • 2021-04-21
    • 2015-06-28
    相关资源
    最近更新 更多