首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将定时任务的执行延迟两年或两年以上

如何将定时任务的执行延迟两年或两年以上
EN

Stack Overflow用户
提问于 2021-04-16 16:16:35
回答 3查看 52关注 0票数 0

在微服务架构中,假设有一个业务场景,其中用户购买了将在两年后过期的东西,系统需要提前一点通知用户。

在这种情况下,我们应该如何处理这种情况,以便即使有许多用户需要通知,也可以及时通知用户?

例如,使用消息队列的延迟队列将导致当有许多用户时消息堆积;使用定时任务时,太多的用户将使服务器CPU过载。

有什么好方法可以做到这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2021-04-16 16:55:25

虽然“微服务”本质上并不意味着"REST",但它们通常是。在REST中,您不应该在内存中存储任何需要在多个请求中幸存下来的内容。两年是一个极端的情况,但即使只有10分钟,它可能也应该去DB。

票数 0
EN

Stack Overflow用户

发布于 2021-04-16 17:18:29

建立两年的队列将是非常不切实际的,如果队列内容没有保存在某个地方,很可能会失败。既然您提到了购买,我假设您有某种类型的数据存储来用sql或非sql记录它们。

您只需将购买日期/时间列添加到表格中即可,使您的工作更轻松。如果你的数量足够低,每天购买,那么我会开始与日期为基础的查找只。您将需要某个服务方法的计划执行,例如在每天早上6点查找即将到期的采购,即2年前7天的purchase_date = now - 723days,然后发送rest请求到某个地方,或者发布一个事件或jms消息,将订单号和purchase_date作为每个采购订单的内容。然后由某处的事件/消息侦听器拾取,并进行相应处理,即向客户发送通知。为了避免发送重复的通知,您还应该将过期通知保存在数据库中,并确保在再次发送之前检查是否已发送购买id的通知。

如果您曾经遇到过这样的情况,即您每天要处理数千个订单,并且不想一下子发布大量事件,那么可以扩展该功能,根据购买时间戳进行过滤,并通过更改查找条件一天多次处理大量购买。

这只是这些需求的一般概念,您将不得不细化许多实现细节,例如如果您的电子邮件服务器停机会发生什么情况。

票数 0
EN

Stack Overflow用户

发布于 2021-04-20 08:41:27

您可以使用quartz job并将其配置为在数据库(JDBC JobStore)中使用持久模式,以避免丢失信息,而且它也适用于集群模式。

Quartz定期检查数据库中最近的任务(可配置参数),如果时间到了,它将处理通知。

您可以配置线程池的大小,以避免过载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67121550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档