我有一個 Java App Engine 專案,我正在使用DeferredTasks進行推送佇列。
/** A hypothetical expensive operation we want to defer on a background task. */
public static class ExpensiveOperation implements DeferredTask {
@Override
public void run() {
System.out.println("Doing an expensive operation...");
// expensive operation to be backgrounded goes here
}
}
我希望能夠創建 DeferredTask 的多個分片,以便能夠獲得更多吞吐量。基本上,我想運行一個 DeferredTask,然后運行更多的 DeferredTask(最多 1,000 個)。本質上是一個扇出任務。我怎樣才能做到這一點?
一個問題是,在創建任務時,您需要在 queue.yaml 檔案中指定它們的名稱。但是如果我想要 1,000 個任務,我真的需要在該檔案中指定 1,000 個嗎?寫出“task-1”、“task-2”等會變得非常乏味。
有一個更好的方法嗎?
uj5u.com熱心網友回復:
這通常通過為每個任務指定一個分片引數并重用同一個佇列來完成。如您的示例中所述,整個 java 物件都使用DeferredTask. 所以你可以簡單地在建構式中傳入你想要的任何值。例如
public static class ShardedOperation implements DeferredTask {
private final int shard;
public ShardedOperation(int shard) {
this.shard = shard;
}
}
...
@Override
public void run() {
System.out.println("Fanning out an expensive operation...");
Queue queue = QueueFactory.getDefaultQueue();
for (int i = 0; i < 1000; i) {
queue.add(TaskOptions.Builder.withPayload(new ShardedOperation(i)));
}
}
這與您鏈接到使用默認佇列的https://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#using_the_instead_of_a_worker_service的部分相匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/419803.html
標籤:
下一篇:帶有谷歌云存盤的Django
