我在亚马逊SQS里面有消息。对于某些消息,我需要在我开始处理它们之前执行六个小时的延迟(延迟是给定的)。
一个解决方案是做Thread.Sleep(6h)
。
我不喜欢这个解决方案,因为我担心线程会发生某些事情而且我会丢失数据。另一个解决方案是读取消息,看是否已经过了6个小时,如果没有将消息返回队列。我不喜欢它,因为程序会发生很多。
有没有更好的解决方案??
答案 0 :(得分:0)
您可以创建单独的多个队列并单独放置队列项。
示例1:
您可以拥有6个队列,如Queue0,Queue1,Queue2,Queue3,Queue4,Queue5,并使用散列函数,如hash(x)= current-hour%6 - 此函数将返回0到5之间的值,您可以将项目放入Queue_f(x)并根据当前时间单独读取队列。
示例2:
如果当前时间是01:00小时,您可以创建单独的队列,如Queue0700Hours,如果当前时间是02:00,您可以创建另一个新队列,如同Queue0800Hours一样聪明并且去。
通过这种方式,您可以根据当前时间戳分离等待/停止处理并独立选择生产者和消费者的需求。