多服务下如何监听第三方平台的任务状态
背景
我们需要调用其他平台的接口,启动一个任务,这个接口是异步执行的,有状态的概念。启动任务之后需要去监听这个任务的状态,在成功完成任务时停止监听,任务失败时需要去更新数据库,同时也停止监听
监听的方案有两种webhook和轮询,团队确定了使用轮询的方式去监听。
举例
假设我们要做一个视频合成的业务。
用户在页面上输入了一些参数然后点击合成,我们拿到参数后调用阿里云的接口做视频合成,在数据库视频合成任务表里面创建一条数据(状态合成中),然后在启动一个异步任务轮询调用阿里云查询视频合成结果的接口。我们需要在合成完成或失败后拿到这次构建的结果去更新数据库里面的状态
问题
正常情况下轮询监听不会有问题,收到一个请求后调openapi启动任务,然后轮询调用查看状态的openapi。但是如果服务宕机了或者需要更新服务,重启服务。一旦涉及重启,就需要从数据库中拿到所有的正在执行的任务,然后恢复监听。一个服务没问题,但是如果是多个服务,1号服务器从数据库拿到 1,2,3,4需要重新监听,2号服务器也是如此。这样就存在多个服务监听了同一个任务的情况。如何让每个服务监听一部分任务,且不重复监听,不丢失监听呢。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: