首页 > 其他分享 >延迟队列服务提供对外接口

延迟队列服务提供对外接口

时间:2023-07-05 16:33:45浏览次数:34  
标签:task return 队列 ResponseResult 接口 任务 taskId import 延迟

延迟队列微服务:

        redis:list-执行时间<=当前时间     zset-当前时间<执行时间<当前时间+5分钟

        添加任务:【以防任务数量过大在,一旦服务器挂掉,内存所有的数据都消失了,所以要做数据持久化】添加任务到数据库、符合条件的任务添加到redis【list,zset】

        取消任务:删除数据库任务信息表中的任务,更新对应的任务日志表,删除redis中对应的任务

        拉取任务:按照任务类型和优先级从redis的list中拉取任务pop,更新数据库日志信息【删除任务,设置任务日志的status】,返回一个Task

        定时任务1:从redis中的zset找到<=当前时间的任务,[分布式锁结局多个部署项目定时处理问题],从zset中删除,移动到list中

        定时任务2:从数据库中将小于当前时间+5分钟即未来5分钟内要发生的任务,从数据库中同步到redis中,【后面拉取任务会涉及删除数据库中的任务】

 

延迟队列服务提供对外接口:

package com.heima.apis.schedule;

import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.schedule.dtos.Task;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient("leadnews-schedule")
public interface IScheduleClient {

    /**
     * 添加延迟任务
     * @param task
     * @return
     */
    @PostMapping("/api/v1/task/add")
    public ResponseResult addTask(@RequestBody Task task);

    /**
     * 取消任务
     * @param taskId
     * @return
     */
    @GetMapping("/api/v1/task/{taskId}")
    public ResponseResult  cancelTask(@PathVariable("taskId") Long taskId);

    /**
     * 按照任务的类型和优先级拉取任务,是从redis中pop的
     * @return
     */
    @GetMapping("/api/v1/task/{type}/{priority}")
    public ResponseResult  poll(@PathVariable("type") int type, @PathVariable("priority") int priority);
}
package com.heima.schedule.feign;

import com.heima.apis.schedule.IScheduleClient;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.schedule.dtos.Task;
import com.heima.schedule.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class ScheduleClient implements IScheduleClient {


    @Autowired
    private TaskService taskService;

    /**
     * 添加延迟任务
     *
     * @param task
     * @return
     */
    @PostMapping("/api/v1/task/add")
    public ResponseResult addTask(@RequestBody Task task) {

        return ResponseResult.okResult(taskService.addTask(task));
    }

    /**
     * 取消任务
     *
     * @param taskId
     * @return
     */
    @GetMapping("/api/v1/task/{taskId}")
    public ResponseResult  cancelTask(@PathVariable("taskId") Long taskId){
        return ResponseResult.okResult(taskService.cancelTask(taskId));
    }

    /**
     * 按照任务的类型和优先级拉取任务,是从redis中pop的
     *
     * @param type
     * @param priority
     * @return
     */
    @GetMapping("/api/v1/task/{type}/{priority}")
    public ResponseResult  poll(@PathVariable("type") int type, @PathVariable("priority") int priority) {
        return ResponseResult.okResult(taskService.poll(type, priority));
    }
}

 

 

        

标签:task,return,队列,ResponseResult,接口,任务,taskId,import,延迟
From: https://www.cnblogs.com/fxzm/p/17528925.html

相关文章

  • 软件测试 | 如何使用代理配置快速定位接口测试脚本问题?
    更多软件测试学习资料!!!在调试接口用例过程中,如果响应结果和预期结果不一致,则需要检查请求信息。通过代理获取自动化测试中的请求响应信息,对比与正常请求响应的区别,就能够更直观的排查请求错误,相当于编写代码时的debug功能。实战练习在自动化测试中,不论是Java版本还是Python版......
  • Revit开发之 IExportContext接口详细
    如果要将Revit模型输出为特定的格式,则需要利用revit的数据导出接口,在revit的二次开发中,给我们提供IExportContext接口。当前接口可用户模型轻量化导出、自定义格式导出等。编号 函数名称函数功能1Finish在导出过程的最后,处理完所有的实体后调用此防范2IsCanceled......
  • 模拟嵌入式边缘计算卡设计方案:367-XC7Z100 板卡 基于zynq XC7Z100 FMC接口通用计算平
    基于zynqXC7Z100FMC接口通用计算平台 一、板卡概述北京太速科技板卡由SoCXC7Z100-2FFG900I芯片来完成卡主控及数字信号处理,XC7Z100内部集成了两个ARMCortex-A9核和一个kintex7的FPGA,通过PL端FPGA扩展FMC、光纤、IO等接口,PS端ARM扩展网络、USB、RS232等接口......
  • 货损、灭失、延迟配送怎么办?打破这几个点才是关键
    物流行业离不开讨论的一个核心话题就是物流质损。不管是在货物的运输、存储还是配送环节,都有可能发生货物损坏的情况。要降低货物质损的风险,有两个基本因素需要考虑:距离长短和环节次数。距离越短,货物摇晃挤压影响就越少;环节越少,货物抛刷、装卸次数就越少。除此之外,还有一些重要的措......
  • 第3章-栈、队列和数组
    3.1栈顺序栈的基本操作#defineMaxSize10typedefstruct{ //栈的顺序存储类型Elemtypedata[MaxSize]; //静态数组存放栈中元素 inttop; //栈顶指针}SqStack;//Sq:sequence--顺序//初始化栈voidInitStack(SqStack&S){S.top=-1; //初始化栈顶指针......
  • 怎么做接口自动化?一名功能测试的心路历程
    小帅是一名功能测试工程师,最近参与的项目接口异常复杂,发版非常频繁,每次回归测试都得很久,项目负责人决定为这个项目搭建接口自动化流程,提高测试效率。这份重任最后还是到了小帅头上,问题来了,要搭建自动化测试,首先得精通一门编程语言,作为一名功能测试小帅感觉头都要大了,自己也只会简......
  • SpringBoot源码初学者(一):SpringBoot功能扩展接口的使用与源码分析
     在长期的源码学习中,我一直没有找到一个讲解SpringBoot源码的文章,适合刚开始阅读源码的新手,包括我之前的写的一些文章,说实话SpringBoot的源码的确不适合新手,跳转多、结构复杂混乱,很容易迷乱其中。长时间的学习当中,也总结出这些文章的部分问题:没有说明用法,直接讲解源码,其实很......
  • 接口缓存、定时更新、异步发送短信
    目录一、接口缓存二、双写一致性之定时更新celery的定时任务代码celery_task/home_task.pycelery_task/celery.py启动worker、beta三、异步发送短信步骤视图函数user/views.py任务celery_task/user_task.py四、异步秒杀逻辑前后端4.1前端Sckill.vue4.2后端视图类路由任务:celery......
  • 消息队列三兄弟谁主沉浮
    简介消息队列主要为了异步场景下实现上下游解耦功能:在传统场景中,上游产生一条消息,比如用户下单了一件商品,系统创建了对应的订单,需要通知下游的物流、支付等系统进行后续处理;消息队列可以使得上游系统(订单)和下游系统(支付/物流等)解耦,上游只管向消息队列中投递消息即可,下游订阅消息......
  • 012双写一致性之定时更新,异步发送短信,异步秒杀逻辑前后端,课程页面前端,课程相关表分析,
    0双写一致性之定时更新#一旦加入缓存,就会出现数据不一致的请请求#双写一致性问题 -1改数据,删缓存-2改数据,改缓存-3定时更新#首页轮播图存在双写一致性问题这个问题 -以现在的技术水平(信号),做不到:改数据删缓存 -能选择的就是定时更新 -轮播......