我有一个任务只是在数据存储中创建一个实体。我现在将许多任务排队到一个命名的推送队列中并让它运行。完成后,我在日志中看到所有任务请求都已运行。但是,创建的实体数量实际上低于预期。
以下是我用来测试的代码示例。我运行了 10000 个任务,最终结果数据存储区中只有大约 9200 个实体。
我使用 RestEasy 公开任务队列的 url。
队列.xml
<queue>
<name>testQueue</name>
<rate>5/s</rate>
</queue>
测试代码
@GET
@Path("/queuetest/{numTimes}")
public void queueTest(@PathParam("numTimes") int numTimes) {
for(int i = 1; i <= numTimes; i++) {
Queue queue = QueueFactory.getQueue("testQueue");
TaskOptions taskOptions = TaskOptions.Builder.withUrl("/queuetest/worker/" + i).method(Method.GET);
queue.add(taskOptions);
}
}
@GET
@Path("/queuetest/worker/{index}")
public void queueTestWorker(@PathParam("index") String index) {
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date today = Calendar.getInstance().getTime();
String timestamp = df.format(today);
Entity tObj = new Entity("TestObj");
tObj.setProperty("identifier", index);
tObj.setProperty("timestamp", timestamp);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key key = datastore.put(tObj);
}
我已经运行了几次,但一次都没有看到创建的所有实体。
如果队列上的争用过多,是否有可能丢弃任务?这是任务队列的预期行为吗?
#### 编辑
我按照 mitch 的建议记录了创建的实体 ID,发现它们确实是按预期创建的。但是日志本身显示了一些奇怪的行为,其中来自某些任务的日志出现在另一个任务的日志中。发生这种情况时,某些任务会在单个请求中显示 2 个实体 ID。
对于显示 2 个实体 ID 的任务,它记录的第一个是数据存储中缺少的实体。这是否意味着对数据存储的大量放置存在问题?(我创建的实体不是更大实体组的一部分,即它不引用@parent)