java 30秒轮询一次_一次失败的技术选型

2020.07.02 

迭代启动前,项目组对某订阅推送功能指派我进行技术方案选型与设计。

业务场景

创建某活动后在活动开始前15分钟向所有报名此活动的用户手机推送一条通知。例如:创建某活动开始时间为2020.07.16 15:00:00,则在2020.07.16 14:45向所有报名参与此活动的用户推动一条活动即将开始的通知推送。

技术备选方案

方案一:延时队列

所有产品线消息队列使用的中间件均为RabbitMQ,RabbitMQ本身并不支持延时队列,若要实现延时队列需要借助死信队列交换器,实现原理大致如下图

5d1d39c363825e6fea4822a38eff37d4.png

后台创建活动时,生成一条过期时间为从当前时间到活动开始前15分钟 TTL的消息推入缓冲队列,待消息过期时通过死信队列再次消费,调用个推进行PUSH。 

方案二:定时任务

使用Quartz定时任务框架结合数据库完成动态定时任务,创建活动时生成活动开始前15分钟的定时任务,到期直接进行推送。

方案三:redis定时轮询

使用rediszSet有序的特性,将活动开始时间向前推15分钟设定为元素的分数值,将活动id设置为元素值,zset中会根据分数值进行排

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值