当前位置: 首页 > 网络应用技术

处理延迟任务的几种解决方案

时间:2023-03-08 17:24:59 网络应用技术

  该项目经常遇到以下需求:

  根据延迟任务的需求,我们可以采用以下解决方案:

  通过线程 - 时间扫描数据库,在数据库当天创建的订单是根据订单订单的时间以及订单是否随着时间的推移而确定的,并且对超时订单进行了相关的更新操作。

  使用弹簧靴与石英相结合来实现它。特定的实现可以转介给先前的文章。

  它是通过JDK的延迟来实施的。这是一个无限的阻塞队列。队列只能从到期期中获取元素,并将其放入延迟中。

  使用JDK的延迟队列进行相关操作。

  该方案使用REDIS的密钥空间通知,使用Key未能处理相关业务实施的回调机制

  MessageListener接口是根据REID解决方案实现的。

  打开redis.conf文件,搜索“ notify-keyspace-events”以找到原始的notify-keyspace-events”,然后将其修改为“ notify-keyspace-events ex”。

  您可以参考文章https://juejin.cn/post/7102801673491808287

  该解决方案用于具有小业务量和低可靠性要求的方案。

  基于RockEtMQ设置消息的级别,发送延迟消息时,RocketMQ延迟消息将暂时存在于名为schedule_topic_xxxx的主题中,并存入特定队列,queueid = delaytimelevel -1,即,一个队列消息具有相同的延迟。确保将延迟发送到消费的延迟相同。Broker将安排时间表_topic_xxxx并将消息写入真实主题。

  具体步骤如下:

  注意:RocketMQ延迟消息的延迟持续时间不支持随机长度的延迟,该长度由特定的延迟级别指定。默认延迟消息支持18个级别。在RocketMQ服务方面的Messagestoreconfig类中,在以下变量中定义了延迟级别:

  例如,指定的延迟级别为2,这意味着延迟时间为5s,即延迟级别从1计数。

  本文解释了几种方案和相关的优势和缺点,用于处理延迟任务。对于不同的业务场景,请选择适当的解决方案。

  原始:https://juejin.cn/post/7103553675695489061