redis实现延迟任务(四)

任务消费

四主要是接着三来接着说,文章三之前已经完成了对于任务服务的编写,其中开发了任务的创建和和删除,任务的同步等等。那么该篇文章主要举例讲解任务的消费。

代码实现

添加任务:

java 复制代码
   @Override
    @Async
    public void addNewsToTask(Integer id, Date publishTime) {

        log.info("添加任务到延迟服务中----begin");

        Task task = new Task();
        task.setExecuteTime(publishTime.getTime());
        task.setTaskType(TaskTypeEnum.NEWS_SCAN_TIME.getTaskType());
        task.setPriority(TaskTypeEnum.NEWS_SCAN_TIME.getPriority());
        WmNews wmNews = new WmNews();
        wmNews.setId(id);
        task.setParameters(ProtostuffUtil.serialize(wmNews));
        scheduleClient.addTask(task);
        log.info("添加任务到延迟服务中----end");

    }

这是一个添加任务,在发布文章的方法里,调用添加任务这个方法,传入对象"文章"也就是news,然后到发布时间了就会进行任务的拉取消费审核然后发布,在最后一步骤可以调用该方法,将news传入task里。

任务消费:

java 复制代码
  /**
     * 消费延迟队列数据
     */
    @Scheduled(fixedRate = 1000)//固定频率,1s拉取一次
    @Override
//    @SneakyThrows
    public void scanNewsByTask() {

        log.info("文章审核---消费任务执行---begin---");
        RestResponse result = scheduleClient.poll(TaskTypeEnum.NEWS_SCAN_TIME.getTaskType(), TaskTypeEnum.NEWS_SCAN_TIME.getPriority());
//        log.info(result.getCode()+result.getResult().toString());
        if(result.getCode()==0 && result.getResult() != null){
            String json_str = JSON.toJSONString(result.getResult());
            Task task = JSON.parseObject(json_str, Task.class);
            byte[] parameters = task.getParameters();
            //反序列化,parameters里装着任务对象
            WmNews wmNews = ProtostuffUtil.deserialize(parameters, WmNews.class);
            System.out.println(wmNews.getId()+"-----------");
            wmNewsAutoScanService.autoScanWmNews(wmNews.getId());
        }
        log.info("文章审核---消费任务执行---end---");
    }

ProtostuffUtil:

这个是一个序列化和反序列化的工具,效率要比jdk高,jdk的序列化个人感觉太慢了,而序列化个人觉得就是将其转换成符合一种双方都能接收的协议,例如http协议规定的数据格式,利用json序列化也可以。

依赖:

XML 复制代码
<!--protostuff-->
        <dependency>
            <groupId>io.protostuff</groupId>
            <artifactId>protostuff-core</artifactId>
            <version>1.6.0</version>
        </dependency>

        <dependency>
            <groupId>io.protostuff</groupId>
            <artifactId>protostuff-runtime</artifactId>
            <version>1.6.0</version>
        </dependency>
相关推荐
风123456789~1 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
4***72131 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
c***42101 小时前
Django视图与URLs路由详解
数据库·django·sqlite
数据库学啊1 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
2***65632 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite
V***u4532 小时前
如何查看PostgreSQL的版本
数据库·postgresql
倔强的石头_2 小时前
openGauss向量数据库:赋能智能制造的工业AI实践
数据库
口嗨农民工2 小时前
3.2 mysql客户端和服务器的启动与停止
数据库·mysql
itmrl3 小时前
Redis高可用方案之哨兵模式搭建
redis