基于redis、quartz的可重试的异步通知实现

1、数据库表设计

CREATE TABLE `crl_notify_record` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `notice_owner` varchar(30)  NOT NULL COMMENT '通知发起方的简称',
  `notice_owner_serial` varchar(80)  NOT NULL COMMENT '通知发起序列号',
  `notice_accepter` varchar(30)  NOT NULL COMMENT '通知接收方简称',
  `notify_url` varchar(300)  NOT NULL COMMENT '通知地址,http(s)://……',
  `notify_content` text  COMMENT '通知内容:明文json串',
  `notify_send_content` text  COMMENT '通知发送内容,有可能加密',
  `retry_count` int NOT NULL DEFAULT '20' COMMENT '通知重试次数,默认值:20',
  `notify_count` int NOT NULL DEFAULT '0' COMMENT '已通知次数',
  `last_notify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最近处理时间,初始值与“下次通知时间”一致,每次拉取处理时变更。(可以推断出与预计处理时间的差距)',
  `next_notify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下次通知时间,计算公式暂定:当前时间 + (n+5)*n^2.(n的单位:秒)',
  `delay_time` int NOT NULL DEFAULT '0' COMMENT '处理延时,单位:秒,处理延时,即“当前时间-下次通知时间”,用来看通知时效性',
  `send_status` varchar(20)  NOT NULL DEFAULT 'INIT' COMMENT '通知送达状态(http响应码为200则认为通知成功).初始化:INIT;处理中:PROCESSING;成功:SUCCESS;未知:UNKNOWN;待处理:PRE_PROCESSING',
  `ret_type` varchar(10)  NOT NULL DEFAULT 'RETCON' COMMENT '通知方对通知回执的需求类型.无需回执(默认):NONE;通知送达回执(接收方http响应200):SENDED;通知应答回执(接收方应答的信息):RETCON',
  `ret_content` varchar(512)  DEFAULT NULL COMMENT '通知接收方返回的通知应答内容',
  `notice_priority` int(11) NOT NULL DEFAULT '0' COMMENT '默认值:0,数值越大优先级越高',
  `created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_notice_owner` (`notice_owner`,`notice_owner_serial`) USING BTREE,
  KEY `idx__query` (`send_status`,`next_notify_time`,`notice_priority`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='统一通知记录表';

2、代码逻辑:

     2.1 加重试机制的分布式锁

     2.2 扫描状态为初始化或待执行且发送时间小于当前时间的100条记录,按优先级排序。

     2.3  批

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值