微服务架构中的Websockets

时间:2017-11-29 04:05:22

标签: web-applications websocket microservices api-gateway

假设我们有一个通知服务,它从消息队列中读取事件并实时通知所有Web客户端。我知道网络套接字是如何工作的,但是当我们之间有一个API网关然后如何在客户端,API网关和通知服务之间维护网络套接字连接时,我感到困惑。

请帮忙!感谢

修改 建筑: enter image description here

3 个答案:

答案 0 :(得分:3)

在2年后遇到这个问题时,我怀疑OP是否仍在解决这个问题,但是对于我自己和未来的访问者,我会建议:

API网关是一个或多个客户端进入系统的主要入口点(如果使用“后端对前端”模式,则可以使用多个网关)。 WebSocket客户端/服务器适用于一个或多个客户端,但与API网关分开。每个客户端将维护与WebSocket服务器的单独连接。在您的应用程序及其服务中,无论何时将事件发布到消息代理,WebSocket服务器都将订阅所有需要通知的事件,并将这些消息转发回每个连接的客户端。决定权是由WebSocket服务器确定哪些客户端应接收给定的通知,还是由WebSocket客户端确定是应处理给定的通知还是忽略它(或两者都取决于逻辑所在)。

答案 1 :(得分:2)

你不应该混淆这些概念。 API网关正在从您的客户端隐藏您的基础架构。对于许多服务而言,它可以是一个前端,在前端的后端"感。它还可以负责许多其他事情,例如身份验证。

Web套接字服务器可以与您的API网关并行。另一个域或另一个端口。我们假设你使用像http://nchan.io这样的网络套接字服务器。应用程序中的事件将通过您的消息代理或您使用的任何消息集成模式。消费者可以接收此事件并通过Nchan服务器发布它们。客户端(例如浏览器)连接到Nchan服务器,并将被告知事件。

答案 2 :(得分:2)

Websockets

客户端打开的Websocket连接最终必须连接到Websocket服务器。

API网关

API网关的工作是接受来自客户端的传入Websocket连接,并将其正确路由到Websocket服务器。 API网关会将从客户端WebSocket发送的所有数据重定向到正确的后端服务,并在整个过程中保持连接状态。

一切如何协同工作...

问题的根源是“我如何让具有websocket连接的客户端从通知服务接收实时更新?”。最简单的答案是在Notification Service上启动Websocket服务器,让每个客户端连接到API网关,然后让API网关将流量路由到Notification Service。

  • 客户端<=> API网关<=>通知服务

进一步了解...

如果客户对转换通知服务中的数据有进一步的要求,则可以:

  1. 将该业务逻辑填充到Notification Service中(不推荐)。
  2. 或者,在API网关和Notification Service之间添加具有转换逻辑的另一种服务,称为Backends for Frontends微服务设计模式(推荐):
    • 客户端<=> API网关<=>通知服务器(转换逻辑)<=>通知服务。
  3. 或者,如果您选择的API网关旨在容纳业务逻辑和转换数据;将转换逻辑直接放在API网关中。