定时任务

原创 2016年05月31日 15:17:26
定时任务:
需求描述:在现有的实时通知功能的基础上添加功能,能够定时发送通知

需求背景:由于在系统中存在正常逻辑的发送通知的接口,并在调用发送通知的接口时会同时调用其他服务的实时接口,所以为了避免其他服务为了这个需求增加工作量,所以在发送任务的入口做判断,进行定时任务的逻辑

解决方案:1.接受客户端发过来的请求和头信息,判断是否为定时通知的请求,并将头信息和请求包专为二进制保存至redis中;

                     问题:在保存二进制的过程中,存在两个问题:

                             a是不能直接将信息保存至redis,因为redis遇到/0操作符时会理解为回车

                             b调用string2bin的接口时,由于该接口是宏定义,所以在编译时直接分配地址,所以在传参的时候必须传一个变量,二不能直接传一个零时变量的地址进去,在宏里面调用结束,进入下一层时,零时变量会析构,所以一旦内存被其他变量占用,那么就会出现问题;


                  2.解析请求包中的发送时间,并根据时间信息(精确到分钟)保存在缓存中,如201605301200代表2016年5月30日12点00分,该字段的member为待发送任务的零时Id;


                  3.新开一个线程,按照10秒中一次(时间根据实际情况定)的规则,在缓存中查找当前时间的字段,如果没有,continue,如果有,就依次将id取出来,并根据id在缓存中取出请求包和头信息,并保存至零时变量中;


                  4.修改请求包中的发送时间(为正常逻辑的时间),在新开的线程中调用正常逻辑,并将请求包和头信息传入;


                  5.发送成功之后,删除收件箱中的id以及id关联的相关信息(如果任务已被删除,在时间队列中扫描到该id,判断id找不到关联信息而跳过);

改进方案:经测试,上诉方案能支持一分钟一台服务器千条级别的任务同时发送,当任务数量剧增时,可用一下方案改进;
                 在上诉方案中增加一个发送任务的线程,具体实现为:从时间队列中取出id之后判断id的合法性,如果id合法,那么将id扔到消息队列中,时间队列本身不用关心任务的发送情况,任务的发送在专门处理发送的消息队列中处理

定时任务实现方法总结与分析

上次熟悉了MarkDown的用法之后,由于各种原因一直没有时间更新博客。。。这次打算把我之前总结的一些东西陆陆续续的写在博客里,希望下次用到的时候能够快速记起来~—————————————华丽的分割线...
  • ouming123456
  • ouming123456
  • 2016年06月01日 17:37
  • 3455

java定时任务的三种方法

在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现T...
  • u010889616
  • u010889616
  • 2016年09月28日 21:35
  • 872

C# 使用定时任务 之 Timer类

在C#里,有三个Timer类: 1.System.Windows.Forms.Timer  2.System.Threading.Timer 3.System.Timers.Timer  ...
  • zhenyongyuan123
  • zhenyongyuan123
  • 2012年04月10日 20:36
  • 5228

Mysql定时任务

1. 存储过程的设计实验 -- 数据库中表的信息查询 ##SELECT TABLE_NAME,TABLE_ROWS, CREATE_TIME FROM INFORMATION_SCHEMA.TABLE...
  • zhangyifei521
  • zhangyifei521
  • 2017年02月21日 17:19
  • 503

mysql定时任务的实现

1,需求:每天晚上10点到早上5点,每10分钟中定时执行存储过程。 2,实现方式:实现方式有两种:        一种是比较常规的,用mysql的event定时任务,先介绍一下mysql中event定...
  • erdongritian
  • erdongritian
  • 2016年11月14日 15:45
  • 4304

ORACLE数据库定时任务

用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。 一、dbms_job涉及到的知识点 1、创建job: variable jobno number; dbms_jo...
  • u013531928
  • u013531928
  • 2015年08月17日 12:31
  • 3130

Oracle创建定时任务

Oracle创建定时任务,下面以创建一个每天凌晨3点钟执行的定时任务为实例。 1、创建定时任务 DECLARE JOB_ID PLS_INTEGER; BEGIN SYS.DBMS_J...
  • pan_junbiao
  • pan_junbiao
  • 2017年02月20日 15:44
  • 524

分布式系统中的定时任务全解(二)

分布式场景下如何做定时任务,如何防止定时任务多服务器时的冲突?
  • BuquTianya
  • BuquTianya
  • 2016年06月11日 22:45
  • 4992

如何在windows服务器上面创建定时任务

在Linux上面运行java程序要比在windows上面跑稳定很多,但是总有些情况下我们的程序跑在了windows上面,这就需要我们对windows server有所了解。今天给大家介绍下如何在win...
  • shiyong1949
  • shiyong1949
  • 2016年10月10日 16:58
  • 7307

oracle定时任务的编写及查看删除

declare jobno number; begin dbms_job.submit(   jobno,--定时器ID,系统自动获得   'PRC_INSERT;', --w...
  • heidou_2016
  • heidou_2016
  • 2016年08月15日 17:39
  • 5604
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定时任务
举报原因:
原因补充:

(最多只允许输入30个字)