异步请求/响应模式?

时间:2018-04-26 20:35:54

标签: spring-boot asynchronous apache-kafka microservices

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

示例1:

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

    1. 面向网络应用的客户端向 / example / getStuff
    2. 发出GET请求
    3. 微服务api通过向kafka发送 stuffRequested 事件来处理getStuff。
    4. 为了使数据返回“stuff”对象,需要来自2个外部数据源的数据。微服务B负责处理这两个数据源,因此它消耗 stuffRequested 事件,从2个数据源获取数据,并发送 stuffRequestCompleted 事件(带有“填充“有效载荷中的数据”以供微服务A使用,以便它可以将“stuff”对象返回给客户端应用程序。
    5. 这就是我被困的地方:所有这些都是在后台异步进行的,我怎样才能“暂停”发送回应,直到我可以消耗 stuffRequestCompleted 和发回请求的数据?
    6. 提前谢谢。

1 个答案:

答案 0 :(得分:2)

我没有等待异步部分完成(我认为是反模式),而是让A服务立即响应 - 说收到了请求并且启动了它后面的过程。

然后,您有两个选择:

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