如何处理对 Message Broker Producer/Consumer 的 HTTP 请求?

How to handle HTTP request to a Message Broker Producer/Consumer?

假设您有一个 POST 请求,其中一些 product 作为负载。传统上,您的 HttpRequest 生命周期应该以携带所请求操作结果的 HttpResponse 结束,在我们的例子中,响应说 "Product created" 可能就足够了。

但是有了消息代理,事情可能会变成这样:

  1. 请求处理程序创建适当的消息,CreateProduct(...),并将其生成到消息代理中的主题。
  2. 然后呢???
  3. 消费者通过在持久数据库中实际创建产品来检索和处理消息。
  4. 然后呢???

第 2 步应该发生什么?

如果我们发送一个回复 "Your product should be created very soon, keep waiting, we keep you posted":

第 4 步应该发生什么?

我有我的看法,但我想知道你在生产中是如何处理的。

实际创建产品的应用程序可以向消息代理中的状态主题生成一条消息说 "Product created",因此原始消息的生产者可以使用它,然后以某种方式通知客户端。我认为可能的唯一方法是通过 WebSocket 连接。

所以我想知道 WebSocket 是否是涉及消息代理的 Http Request/Response 的唯一方法? Http Request/Response 使用消息代理是否合理?

您可以以完全异步的方式来考虑这一点(那时不需要 websocket)。

您发出 POST Http 请求,这将创建一个与您的工作关联的唯一 ID。此 ID 也将存储在数据库中,状态类似于 'processing'。 此外,ID 将返回给您的客户。

您的作业 ID(及其有效负载参数)在 Kafka 内部传播并最终到达消费者。该消费者将处理工作并将内容提交给外部数据库(或其他)。 作业完成后,您将作业状态更新为 'done' 或类似的内容。

与此同时,在客户端,您轮询一个端点,该端点将询问您的作业数据库状态作业是否结束。

这是满足您需求的一种非常常见的方式。

雅尼克