如何处理对Message Broker生产者/消费者的HTTP请求?

时间:2019-08-28 15:39:19

标签: apache-kafka httprequest httpresponse event-sourcing messagebroker

假设您有一个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"

  • 已发送响应后如何通知客户 ?
  • 我们是否被迫使用WebSocket以便我们可以保持链接打开?

步骤4应该发生什么?

我有意见,但我想知道您在生产中如何处理它。

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

所以我想知道WebSocket是进行涉及消息代理的Http请求/响应的唯一方法吗?并且将消息代理用于Http请求/响应是否合理?

1 个答案:

答案 0 :(得分:2)

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

您执行POST Http请求,这将创建与您的工作关联的唯一ID。该ID也将存储在数据库中,状态为“处理中”。 除此之外,ID会退还给您的客户。

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

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

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

Yannick