我需要构建一个接收付款ID并在30秒后向另一个Web服务发送请求以检查付款是否成功的程序。 程序每分钟将接收500-1000个事务,因此我认为使用Java线程池来完成此任务效率不高。
我正在考虑使用Redis保留需要检查的付款ID。 ID应该根据发布时间一一调用(每个ID必须在30秒后调用)。
到目前为止,我可以使用SET键值数据类型:
SET ID TIMESTAMP
这是实施程序的正确方法吗?您还建议其他选项吗?
我正在使用Spring Boot和PostgreSql作为数据库。
答案 0 :(得分:1)
用例似乎是延迟的消息处理。这里可以使用Active MQ /或RabbitMQ消息处理,它们支持延迟的消息处理。 RabbitMQ。如果无法在您的用例中进行扩展,则可以使用固定存储桶大小的分片方式将消息存储在某些NOSQL DB(Cassandra)中,例如该事件计划在上午10:21:55进行,存储桶是10:21:00 AM。主进程会选择合格的存储桶并分配给工作人员进行处理。
答案 1 :(得分:0)
您可以使用redis zset(排序集合),该集合根据给定的得分按顺序存储元素,有关更多信息,您可以检查排序集合的工作原理。
示例:
zadd SET_NAME PAYMENT_ID ISSUED_TIME(EPOCH)
然后每隔约10秒运行一次调度程序,该调度程序将按照如下得分从已排序的集合中获取付款ID:
zrangebyscore SET_NAME LONG.MIN_VALUE CURRENT_TIME
我希望这对您有帮助