假设您有一个POST
请求,其中有一些product
作为有效负载。传统上,您的HttpRequest
生命周期应以包含请求的操作结果的HttpResponse
结尾,在我们的案例中,回答"Product created"
可能就足够了。
但是使用消息代理,事情可能会变成这样:
CreateProduct(...)
,并将其生成为消息代理中的主题。步骤2应该怎么办?
如果我们发送的回复是"Your product should be created very soon, keep waiting, we keep you posted"
:
WebSocket
以便我们可以保持链接打开?步骤4应该发生什么?
我有意见,但我想知道您在生产中如何处理它。
实际创建产品的应用程序可以在消息代理中生成一条消息,指示状态主题为"Product created"
,因此原始消息的生产者可以使用它,然后通知客户端如何操作。我认为唯一可行的方法是通过WebSocket
连接。
所以我想知道WebSocket
是进行涉及消息代理的Http
请求/响应的唯一方法吗?并且将消息代理用于Http
请求/响应是否合理?
答案 0 :(得分:2)
您可以以完全异步的方式考虑这一点(那时不需要websocket)。
您执行POST Http请求,这将创建与您的工作关联的唯一ID。该ID也将存储在数据库中,状态为“处理中”。 除此之外,ID会退还给您的客户。
您的作业ID(及其有效负载参数)在Kafka内传播,最后到达消费者。该使用者将处理作业并将内容提交到外部数据库(或其他任何数据库)。 作业完成后,您将作业状态更新为“完成”或类似的内容。
与此同时,在客户端,您将轮询一个端点,该端点将询问您的Job DB状态,该作业是否结束。
这是满足您需求的一种非常常见的方法。
Yannick