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>
相关推荐
Mr数据杨26 分钟前
解决整合Django与Jinja2兼容性的问题
数据库·django·sqlite
Adolf_199326 分钟前
Django中 model 一对一 一对多 多对多关系 关联
数据库·django·sqlite
ueanaIU潇潇子1 小时前
idea根据实体类生成数据库表
数据库·mysql·intellij-idea·实体类生成数据库
爱读源码的大都督1 小时前
PostgreSQL数据库中Sequence的使用详解
数据库·后端·架构
呆呆小雅5 小时前
C# 可空类型
数据库·oracle·c#
Duck Bro6 小时前
MySQL:常用数据类型
java·数据库·c++·mysql·java-ee
z千鑫6 小时前
【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
c语言·数据库·c++
开敲6 小时前
【MySQL】MySQL数据库基础
数据库·mysql
痞老板A小安装C47 小时前
Redis 过期策略和内存淘汰策略
数据库·redis·缓存
言之。7 小时前
python3 自动更新的缓存类
缓存