Spring微服务多任务处理

lvmkulzt  于 2023-05-21  发布在  Spring
关注(0)|答案(1)|浏览(150)

我有一个关于微服务世界的问题。假设我有两个微服务,微服务A向微服务B发出请求。微服务B执行一些“长”操作,并向另一个微服务C发出请求。在结果中,微服务A等待来自微服务B的结果。如果微服务A“连接”到前端服务,用户发起操作并等待该操作的结果,则如何处理这样长的操作。
在这些微服务中,有没有什么好的方法来处理长时间运行的任务?你对Sping Boot 中最有效和可扩展的案例有什么建议?先谢谢你。

wljmcqd8

wljmcqd81#

在高层次上,让我们将API调用分为两种主要类型
1.同步
1.异步

同步

这是使用RestTemplateWebClientFeignClient等实现的理想情况,其中微服务A将等待微服务B的响应。
非常适合快速操作并涵盖大多数使用情形

异步

正如@taleodor提到的,另一种方法是实现对其他微服务的async调用,它只会返回Run idAcknowledgement id来指示长时间运行的进程开始。要获取该进程的状态,您可以考虑通过Message queue(如ActiveMQApache Kafka)实现它,它基于生产者/消费者或Publisher/subscriber (pub/sub)的概念,在您长期运行的微服务中,一旦完成,微服务A或B将订阅该事件并读取响应!
除了消息队列之外,微服务A还可以实现scheduled task来检查进度完成或资源更新,具体取决于如何实现它!

相关问题