任务消费
四主要是接着三来接着说,文章三之前已经完成了对于任务服务的编写,其中开发了任务的创建和和删除,任务的同步等等。那么该篇文章主要举例讲解任务的消费。
代码实现
添加任务:
@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里。
任务消费:
/**
* 消费延迟队列数据
*/
@Scheduled(fixedRate = 1000)//固定频率,1s拉取一次
@Override
// @SneakyThrows
public void scanNewsByTask() {
log.info("文章审核---消费任务执行---beg服务器托管网in---");
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序列化也可以。
依赖:
io.protostuff
protostuff-core
1.6.0
io.protostuff
protostuff-runtime
1.6.0
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 云原生之深入解析docker实用工具gosu和su-exec实践
一、volume 的权限问题 在 Docker 中,需要把 host 的目录挂载到 container 中作为 volume 使用时,往往会发生文件权限问题。常见的现象是,container 对该路径并无写权限,以致其中服务的各种千奇百怪的问题。 导致这类问题…