【问题标题】:Asynchronous request/response pattern?异步请求/响应模式?
【发布时间】:2018-10-07 15:38:16
【问题描述】:

我对微服务和异步架构相当陌生,我想知道典型的请求/响应在这种环境中是如何工作的。

示例 1:

  1. 假设我有一个网络应用程序,它向 /example/doStuff 发送 POST 请求,并希望得到一个响应,让它知道该请求是否成功完成。
  2. 微服务 A 的 api 处理 /doStuff 具有这样的逻辑,即每当请求 /doStuff 时,向消息代理发送一个 doStuffInitiated 事件消息。
  3. 由于 doStuffInitiated 事件,微服务 B 和 C 通过在 db 中设置标志等方式对此消息做出反应,并向代理生成 doStuffCompleted 消息
  4. 这是我卡住的地方:有没有办法让微服务 A 等待 doStuffCompleted 被消耗,然后再将响应发送回发出原始请求的 Web 应用程序?这甚至是正确的方法吗?

示例 2:

  1. 面向客户端的 Web 应用向 /example/getStuff 发出 GET 请求
  2. 微服务 API 通过向 kafka 发送 stuffRequested 事件来处理 getStuff。
  3. 为了让数据返回“stuff”对象,需要来自 2 个外部数据源的数据。微服务 B 负责处理这 2 个数据源,因此它使用 stuffRequested 事件,从 2 个数据源获取数据,并发送 stuffRequestCompleted 事件(带有“负载中的“填充”数据)供微服务 A 使用,以便它可以将“填充”对象返回给客户端应用。
  4. 这是我卡住的地方:所有这些都是在后台异步进行的,我如何“暂停”发回响应,直到我可以使用 stuffRequestCompleted 并发回请求的数据?

提前谢谢你。

【问题讨论】:

    标签: spring-boot asynchronous apache-kafka microservices


    【解决方案1】:

    我不会等待异步部分完成(我认为这是一种反模式),而是立即执行 A 服务来响应 - 说收到了请求并启动了它背后的过程。

    那么,你有两个选择:

    1. 在前端定期检查(请求)操作状态,
    2. 使用 websocket 实现服务器到客户端的通信。

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2016-07-25
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2021-02-09
      相关资源
      最近更新 更多