gpt4 book ai didi

microservices - 如何在事件驱动微服务架构中进行查询?

转载 作者:行者123 更新时间:2023-12-04 13:56:50 28 4
gpt4 key购买 nike

让我们假设以下基于CQRS体系结构的简单UC:

电影说,我们有一个后端来管理业务对象。

  • 此后端由2个微服务组成:CommandManager(创建/更新/删除影片)和QueryManager(查询影片)
  • 我们有一个前端,该前端提供用于创建新电影的网页,并且此操作会自动转到另一个描述该电影的网页。

  • 一种简单的方法是:
  • 一个网页使用表单收集电影信息并将其发送到前端。
  • 前端向CommandManager发出POST请求
  • CommandManager将新影片写入数据存储,并返回影片键
  • 前端使用QueryManager的此键对
  • 进行GET
  • QueryManager使用键在数据存储区中查找Movie并将其返回。
  • 前端会在页面上提供电影信息。

  • 好的,现在我想以一种事件驱动的方式来转换此UC。这是新的流程:
  • 一个网页使用表单收集电影信息并将其发送到前端。
  • 前端在BUS中用新的电影信息
  • 编写一条消息
  • CommandManager监听BUS并在数据存储区中创建新影片。最终,它在BUS中发布新消息,指定已创建新的Movie。

  • 此时,由于这种流程是异步的,因此前端不再等待响应。我们如何完成此流程以将用户转发到电影信息网页?在查询QueryManager之前,我们应该等待创建过程完成。

    笼统地说,在基于总线/事件的异步体系结构中,如何执行用于在网页中提供信息的查询?

    最佳答案

    除了@VoiceOfUnreason的答案之外,

    如果这两个微服务是RESTFul,则CommandManager可以返回202 Accepted,并带有指向将来将要创建的资源的链接。然后,客户端可以轮询该资源,直到服务器以200 OK响应。

    另一种解决方案是CommandManager将返回带有指向202 Accepted端点的链接的command/status。客户端将轮询该端点,直到状态为command-processed(包括实际资源的URL)或command-failed(包括有关故障的描述性消息)为止。

    通过使用Server Sent Events发送所有已处理命令的状态,可以增强这些解决方案。这样,客户端无需进行轮询即可得到通知。

    如果客户端不知道该体系结构是异步的,则解决方案是使用一个API网关,该网关阻止客户端的请求,直到上游微服务处理该命令,然后以完整的资源数据进行响应。

    关于microservices - 如何在事件驱动微服务架构中进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279479/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com