延迟任务通知服务的开发设计

2022-11-17  本文已影响0人  天草二十六_简村人

一、背景需求

作为平台的基础服务之一,延迟任务都是必不可少的,它的作用主要是延迟,解决我们常遇到的订单定时关闭,自动上下架等业务需求。

由业务方来调用延迟任务通知服务,可以新增、编辑或删除任务,由延迟任务通知服务返回任务ID。业务方可以主动查询任务的状态,是调度成功还是失败。

二、目标

三、术语

1、任务

业务方需要在指定时间点,回调的接口及参数,被当做任务存储起来。类似于一个Postman的机器人,你事先告知它,你要在什么时间调用哪个接口,入参是什么。

2、冷缓存区

将回调时间是在当天的任务,抽离至某个存储区域,我们把这个区域,叫做冷缓存区。这个区域的要求是减少数据量,从而加速筛选出热数据的时间。与之相对的是热缓存区。见下。

我们会在每天的0点0时0分,把当天的任务放入冷缓存区。

3、热缓存区

热与冷相比较而言,是指回调时间将在最近N分钟后。我们把这样的数据从冷数据区抽离至热数据区。热数据的要求是遍历要快,除了数据量少之外,最好还是内存这样的介质,减少IO次数。

四、数据的流转图

image.png

下面是以新增任务为示例的一个流程:


image.png

五、任务的状态机

image.png

六、数模设计

image.png

七、主流程图

image.png

八、接口设计

1、新增任务

支持批量新增,List<TaskDTO>

[
    {
        "content":"",
        "notifyUrl":"",
        "notifyTime":"",
    }
]

返回任务ID给业务方

1003

2、编辑任务

支持批量编辑,必须传入taskId。后面的删除和查询也一样。

[
    {
        "content":"",
        "notifyUrl":"",
        "notifyTime":"",
        "taskId":""
    }
]

返回成功还是失败

3、删除任务

传入多个任务ID,List<String> taskIds

["1003","2003"]

返回成功还是失败

4、查询任务

传入多个任务ID,List<String> taskIds

["1003","2003"]

返回任务的详情

[
    {
        "content":"",
        "notifyUrl":"",
        "notifyTime":"",
        "taskId":"1003"
    },
    {
        "content":"",
        "notifyUrl":"",
        "notifyTime":"",
        "taskId":"2003"
    }
]
上一篇 下一篇

猜你喜欢

热点阅读