【发布时间】:2018-10-07 15:38:16
【问题描述】:
我对微服务和异步架构相当陌生,我想知道典型的请求/响应在这种环境中是如何工作的。
示例 1:
- 假设我有一个网络应用程序,它向 /example/doStuff 发送 POST 请求,并希望得到一个响应,让它知道该请求是否成功完成。
- 微服务 A 的 api 处理 /doStuff 具有这样的逻辑,即每当请求 /doStuff 时,向消息代理发送一个 doStuffInitiated 事件消息。
- 由于 doStuffInitiated 事件,微服务 B 和 C 通过在 db 中设置标志等方式对此消息做出反应,并向代理生成 doStuffCompleted 消息
- 这是我卡住的地方:有没有办法让微服务 A 等待 doStuffCompleted 被消耗,然后再将响应发送回发出原始请求的 Web 应用程序?这甚至是正确的方法吗?
示例 2:
- 面向客户端的 Web 应用向 /example/getStuff 发出 GET 请求
- 微服务 API 通过向 kafka 发送 stuffRequested 事件来处理 getStuff。
- 为了让数据返回“stuff”对象,需要来自 2 个外部数据源的数据。微服务 B 负责处理这 2 个数据源,因此它使用 stuffRequested 事件,从 2 个数据源获取数据,并发送 stuffRequestCompleted 事件(带有“负载中的“填充”数据)供微服务 A 使用,以便它可以将“填充”对象返回给客户端应用。
- 这是我卡住的地方:所有这些都是在后台异步进行的,我如何“暂停”发回响应,直到我可以使用 stuffRequestCompleted 并发回请求的数据?
提前谢谢你。
【问题讨论】:
标签: spring-boot asynchronous apache-kafka microservices