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>
相关推荐
MeAT ITEM2 分钟前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens6 分钟前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.16 分钟前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
Rick199315 分钟前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花7 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56618 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全10 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_7717172110 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本10 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi10 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql