我对微服务和异步体系结构相当陌生,我想知道在这样的环境中典型的请求/响应是如何工作的。
例1:
假设我有一个web应用程序,它将post请求发送到/example/dostuff,并期望得到一个响应,让它知道该请求是否成功完成。
microservicea的api处理/dostuff具有这样的逻辑:每当请求/dostuff时,都会向messagebroker发送dostufinitiated事件消息。
作为dostuffinitiated事件的结果,microservice b和c通过在db等中设置标志来对此消息作出React,并向代理生成dostufficompleted消息
这就是我被困的地方:有没有一种方法可以让microservice等待dostufffcompleted被消费,然后再将响应发送回发出原始请求的web应用程序?这样做对吗?
例2:
面向客户端的web应用向/example/getstuff发出get请求
微服务api通过向kafka发送stuffrequested事件来处理getstuff。
为了获得返回“stuff”对象的数据,需要来自2个外部数据源的数据。microservice b负责处理这两个数据源,因此它使用stuffrequested事件,从这两个数据源获取数据,并发送stuffrequestcompleted事件(有效负载中包含“stuff”数据)供microservice a使用,以便将“stuff”对象返回到客户端应用程序。
这就是我被困的地方:所有这些都是在后台异步进行的,我如何“暂停”发回响应,直到我可以使用stuffrequestcompleted并发回请求的数据?
先谢谢你。
1条答案
按热度按时间xmjla07d1#
与等待异步部分完成(我认为这是一个反模式)不同,我将执行a服务以立即响应—表示请求已被接收,其背后的过程已启动。
然后,您有两个选择:
在前端定期检查(请求)操作的状态,
用websocket实现服务器到客户端的通信。