微服务异步操作HTTP响应

2024-02-10

我们正在构建一个微服务应用程序,客户可以在其中创建projects。下图展示了该过程的技术流程:

我的问题:API 网关应向客户端返回什么 HTTP 响应(步骤 1)?

我最初的想法是返回 202,但问题是我不知道Location yet (/projects/{id}),因为 idproject将在项目管理服务处创建。


考虑到新创建的IDproject实体在请求时未知(即它是在插入数据库后生成的),您确实无法生成指向该实体的 urlproject资源。

相反,您可以分配一个 ID(即1234-abcd-5678-efgh) 在发送到总线之前添加到命令中,并在 API 网关本身上跟踪其执行状态。然后您可以使用命令执行状态端点响应客户端,例如/commands/1234-abcd-5678-efgh可以通过轮询的方式进行查询。

另一种方法是使用另一个服务来保留和提供唯一 ID,但您必须对其进行阻塞调用,这会损害可扩展性。或者,您可以在 API 网关本身内部(同一节点上)托管此服务,以最大程度地减少延迟。此外,如果项目创建失败,则存在丢失某些 ID 的风险,但这可以通过在这些情况下释放这些 ID 来补偿(从而增加架构复杂性)。

第三种解决方案可能是使用project代理 ID,如 UUID,分配为project,包含在命令中,具有只能在进程的预创建阶段使用的备用身份的目的。那么,对客户端的响应可能是这样的:/projects/by-guid/1234-abcd-5678-efgh并在之后project被创建了一个GET对此url将永久重定向到最终项目 URL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务异步操作HTTP响应 的相关文章

随机推荐

  • jsf html标签内部值

    我有这个命令按钮 我需要使用 Bootstrap 3 添加一个图标
  • 离子应用程序的 Keycloak:带有 cordova-native 的 keycloak-js 不起作用

    我正在尝试在我的 ionic 4 cordova 应用程序中使用 Keycloak js 来自 4 4 0 Final 库 我已遵循example https github com keycloak keycloak tree master
  • 错误由于错误而停止(org.apache.kafka.connect.cli.ConnectDistributed)java.lang.NoClassDefFoundError:io/debezium/util/IoUtil

    客观的 我正在尝试使用 Debezium 连接器 1 2 4 Final 从 Kafka Connect 最好是分布式模式 连接到我的 Oracle 数据库 12c 我使用的Kafka版本是2 13 2 6 0 使用的命令 正如所提到的he
  • YouTube 视频嵌入 pyqt

    如何使用 PyQt5 嵌入 youtube 视频 我尝试执行以下操作 但它给了我一个未解决的错误 DirectShowService doRender 未解决的错误代码 from PyQt5 import QtWidgets QtCore
  • 使用 Kerberos S4U 扩展(在 Java 8 中引入)通过 JDBC 连接到数据库

    自从我用 Java 编写代码以来已经有一段时间了 所以我可能遗漏了一些明显的东西 我想通过 JDBC 连接到数据库 我需要支持很多 SQL Server MySQL 等 但是 我想使用 Java 8 中添加的 Microsoft S4U J
  • 如何获取被调用例程中调用函数的名称?

    是否有一种 非内部 方式来获取调用者的姓名 如函数stop does 我的想法是 我有一个小函数来检查输入并在不满足某些条件时停止执行 该函数被其他几个使用相同验证代码的函数调用 如果输入无效 则调用者的环境将被转储 因此我可以看到传递给函
  • SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS 是什么意思?

    我正在尝试使用 onPreviewFrame 回调显示过滤后的相机预览 问题是当我删除这一行时 mHolder setType SurfaceHolder SURFACE TYPE PUSH BUFFERS 隐藏预览 应用程序崩溃 日志中写
  • 将 div 高度设置为等宽 ( javascript )

    我知道这是一个很受欢迎的问题 我已经阅读了解决方案 包括将 padding bottom 设置为相等宽度 以及将其分配给伪元素 以便更容易插入内容 加上其他 CSS 解决方案 css 高度与宽度相同 https stackoverflow
  • 如何在DNN中获取父页面的名称和链接

    我希望子页面上有一个链接 它不仅是父页面的名称 而且还链接到 DNN 中的父页面 在你的皮肤 ascx 文件中使用它 a href a 注意 这是针对 C 皮肤的
  • 在 Windows Phone 7 开发中使用 SQLite

    我是 Windows Phone 7 开发的新手 我使用 SQLite 作为数据库 那么任何人都可以帮助我了解如何使用它吗 如果您有任何有关此问题的帮助链接或论坛 请帮助我 我已经搜索了两天了 但我没有得到我想要的东西 Thanks 您是否
  • Proguard 重复的 Zip 条目

    我试图通过 Proguard 运行我的 Android 应用程序 但是这个不断出现 Warning Exception while processing task java io IOException Can t write C User
  • 在 Rails 的会话中存储对象

    我一直被教导在会话中存储对象是一个坏主意 相反 应该存储 ID 以便在需要时检索记录 但是 我有一个应用程序 我想知道它是否是该规则的例外 我正在构建一个抽认卡应用程序 被测验的单词位于数据库中的一个表中 其架构不会更改 我想存储当前在会话
  • 捕获承诺中的拒绝

    我想保留错误func reject 不直接到onError 通过选择 在我总是让func resolve 并确定后的返回结果yield func 如果我想直接前往onError use throw 想知道有什么更好的主意我可以让func r
  • RedirectToAction 到另一个控制器中的操作不起作用

    在我的 mvc3 POST ActionResult 方法中 我有一部分如下代码 if button Save as Pdf RedirectToAction getPdf Pdf resultObtained 当用户单击按钮时 它会将用户
  • Python配置文件:有什么文件格式推荐吗? INI格式还合适吗?看起来很老派

    我需要存储 Python 应用程序的配置 键 值 并且我正在寻找将这些配置存储在文件中的最佳方法 我遇到了Python的配置解析器 http docs python org library configparser html我想知道 INI
  • 使用 rspec 调用特定 url

    我想在 rspec 中创建一个 get 请求 get exec query gt bla id gt something user id gt user 这会构建一个类似以下的 URL user query something exec q
  • 在静默模式下安装 sqlcmd 接受 EULA

    我正在尝试以静默模式安装 sqlcmd 但我不知道如何自动接受 EULA 我尝试安装的文件名为 MsSqlCmdLnUtils msi 从 MS 下载中心下载 这是我到目前为止所尝试过的 通过谷歌找到 msiexec i MsSqlCmdL
  • 隐藏部分溢出的元素

    我正在寻找一种纯 CSS 方法来隐藏已部分溢出其容器的 div 3 请参阅附图 这是一个可行的解决方案 它将完全隐藏不适合其父级固定高度的项目 Codepen https codepen io PhilippeVay pen JyBQOy
  • 用模型方法查询?

    我在仅对活动对象执行查询时遇到问题 我在数据库中没有活动列 相反 在模型游戏上 我有以下方法 def complete self winner true false end 这样如果一场比赛有赢家 complete 将返回 true 我想查
  • 微服务异步操作HTTP响应

    我们正在构建一个微服务应用程序 客户可以在其中创建projects 下图展示了该过程的技术流程 我的问题 API 网关应向客户端返回什么 HTTP 响应 步骤 1 我最初的想法是返回 202 但问题是我不知道Location yet pro