微服务架构中的Websockets

Vip*_*yal 22 web-applications websocket microservices api-gateway

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

请帮忙!谢谢

编辑: 架构: 在此输入图像描述

ale*_*nis 7

网络套接字

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

API网关

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

一切如何协同工作...

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

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

更进一步...

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

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


Jas*_*zek 7

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

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


小智 5

你不应该混淆这些概念。API 网关对您的客户端隐藏了您的基础设施。在“前端后端”的意义上,它可以是许多服务的单一前端。它还可以负责许多其他事情,例如身份验证。

Web 套接字服务器可以与您的 API 网关并行放置。另一个域或另一个端口。假设您使用像http://nchan.io这样的网络套接字服务器。来自您的应用程序的事件通过您的消息代理或您使用的任何消息传递集成模式。消费者可以获取这些事件并通过 Nchan 服务器发布它们。客户端(例如浏览器)连接到 Nchan 服务器并会收到有关事件的通知。

  • 我的困惑是向客户端发出的通知将通过 API 网关或直接向客户端发出。根据我的理解,最初连接将通过 API 网关建立,然后所有通信将直接在通知服务器和客户端之间进行。 (2认同)