向 Web 客户端公开消息队列?

Exposing messaging queue to web clients?

考虑一个实时应用程序,其中 Web 客户端与某个实体 X 建立持久连接。

我们这里可能的选择是:

  1. 连接到 Web 服务器,然后将消息发送到消息队列。
    在这种情况下,实体 X 等于某个 Web 服务器,然后将该消息转发到消息队列。
                   |=Backend=             
(client) ----------|-(web server)-----------(messageq)------> process message
                   |             ^--backchannel connection

  1. 直接连接到消息队列。
    在这种情况下,Web 客户端直接连接到消息队列端点并推送消息。
                   |=Backend=
(client) ----------|-(messageq)------> process message
                   |

此处推荐的最佳做法是什么?消息队列位于 标准企业架构 中的什么位置?此外,如果您知道最佳实践,请分享您是如何学习该信息的(哪些资源/书籍包含这些知识?)。谢谢。

当客户端是web-browser:

让我做一些问答,您的问题可能会得到解答

Q1:我们是否将应用程序数据库暴露给我们的客户,以进行简单的读取操作?

A1: 不,我们要控制向客户端公开的内容

Q2: 根据 Q1,向客户端公开 messaging-queue 是否有意义?

A2: 没有,原因同A2.

当 messaging-queue 暴露给 WebClient 时:

问题 1: 如果消息队列提供程序需要从 Rabbit-Mq 更改为 Kafka,会发生什么情况?

A1: 旧的移动应用程序会崩溃。 Web-Client 需要更改以与新队列兼容。 (糟糕的架构

Q2: 有人可以接入另一个 topic/queue 以及 with-in 相同的 messaging-queue 吗?

A2: 是(糟糕的架构

当客户端为其他服务时:

Inter-service 使用共享 messaging-queue 的通信是许多应用程序用于 async-communication 的模式。