我希望描述以下场景:我有一个 Node.js 后端应用程序(它使用单线程事件循环)。这是系统的总体架构:Producer -> Kafka -> Consumer -> Database
假设生产者向 Kafka 发送一条消息,该消息的目的是在数据库中进行某个查询并检索查询结果。然而,众所周知,Kafka是一个异步系统。如果生产者向 Kafka 发送一条消息,它会收到一条响应,表明该消息已被 Kafka 代理接受。Kafka 代理不会等到消费者轮询消息并处理它。
那么生产者如何获取对数据库操作的查询结果呢?
使用 Kafka 的流程如下所示:
生产者 A了解消费者A 消费的消息发生了什么情况的唯一方法是生成另一条消息。这将由任何其他可用的消费者(在本例中为消费者 B)进行相应处理。
正如您已经提到的,此流程是异步的。当您对查询进行非常繁重的处理(例如报告生成或类似的操作)时,这可能很有用,例如第二个生产者将通知用户收件箱。
如果不是这种情况,也许您应该使用 HTTP,它是同步的,您将在处理结束时得到响应。
| 归档时间: |
|
| 查看次数: |
2822 次 |
| 最近记录: |