在appengine中按时间顺序保持任务队列
Keeping task queues in chronological order in appengine
在googleapp engine中,当你向同一个推送任务队列中添加任务时,会不会都按时间顺序一个接一个地排队?还是有可能一个任务可以在另一个任务之前执行,尽管它是最后添加的? (这都是假设他们使用相同的队列)。
不一定。我可以想到 2 种可能不会发生的情况:
任务可以有不同的 ETA(例如,将来),顺序通常是 ETA,参见
任务执行可能会失败(无论出于何种原因)并且它们可能会使用退避方案自动重试(即在一些延迟之后)。这意味着在失败的任务之后通常会 运行 的其他任务实际上可能会在其重试尝试之前 运行。
任务队列不保证执行顺序。特别是,计划到 运行 的任务会立即遵循可能导致重大重新排序的代码路径。推送和拉取队列的行为也明显不同。
但是,如果您将任务安排到 运行 后不久的将来,执行顺序更有可能是 eta 顺序。同样,没有任何保证,您应该围绕无序交付进行设计,这是一种正常但不常见的情况。故障模式通常是在短时间内出现大量无序任务,而不是偶尔孤立的无序任务。
在googleapp engine中,当你向同一个推送任务队列中添加任务时,会不会都按时间顺序一个接一个地排队?还是有可能一个任务可以在另一个任务之前执行,尽管它是最后添加的? (这都是假设他们使用相同的队列)。
不一定。我可以想到 2 种可能不会发生的情况:
任务可以有不同的 ETA(例如,将来),顺序通常是 ETA,参见
任务执行可能会失败(无论出于何种原因)并且它们可能会使用退避方案自动重试(即在一些延迟之后)。这意味着在失败的任务之后通常会 运行 的其他任务实际上可能会在其重试尝试之前 运行。
任务队列不保证执行顺序。特别是,计划到 运行 的任务会立即遵循可能导致重大重新排序的代码路径。推送和拉取队列的行为也明显不同。
但是,如果您将任务安排到 运行 后不久的将来,执行顺序更有可能是 eta 顺序。同样,没有任何保证,您应该围绕无序交付进行设计,这是一种正常但不常见的情况。故障模式通常是在短时间内出现大量无序任务,而不是偶尔孤立的无序任务。