com.google.appengine.api.taskqueue
Конфигурация очереди
1. Push-очереди (по умолчанию):
Push-очередь будет обрабатывать задачи на основе скорости обработки, заданной в определении очереди (см. Ниже). App Engine автоматически управляет временем жизни этих очередей (созданием, удалением и т. Д.) И регулирует мощность обработки в соответствии с вашей конфигурацией и объемом обработки. Они могут использоваться только в App Engine (внутри вашего приложения).
2. Потяните очереди:
Разрешить потребителю задач арендовать задачи в определенное время в течение определенного периода времени. Они доступны как внутри, так и снаружи через API REST Task Queue. В этом случае, однако, GAE не управляет жизненным циклом и скоростью обработки очередей автоматически, это зависит от разработчика. Бэкэнд также имеет доступ к этим очередям.
Задания
Задача внутри транзакции
Задачи могут быть поставлены в очередь как часть транзакции хранилища данных. Вставка (не выполнение) будет гарантирована, если транзакция была успешно завершена. Единственное предостережение в том, что транзакционные задачи не могут иметь пользовательских имен, и в одной транзакции может быть не более 5 вставок в очереди задач.
конфигурация
Вот некоторые вещи, которые вам разрешено настраивать (более обширная документация):
• bucket-size : скорость обработки очереди, когда в очереди много задач и скорость высока (только push). (Предупреждение: сервер разработки игнорирует это значение)
• max-concurrent-запросы : максимальное количество задач, которые могут быть выполнены в любой момент времени в указанной очереди (только push).
• режим : будь то толчок или тянуть.
• имя : имя очереди
• target : нацелить задачу на конкретный сервер или версию приложения.
|
1
2
3
4
5
6
7
8
9
|
<queue-entries> <!--Set the number of max concurrent requests to 10--> <queue> <name>optimize-queue</name> <rate>20/s</rate> <bucket-size>40</bucket-size> <max-concurrent-requests>10</max-concurrent-requests> </queue> </queue-entries> |
Образец кода
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class TaskQInfo extends HttpServlet { private static volatile int TASK_COUNTER = 0; // Executed by user menu click public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Build a task using the TaskOptions Builder pattern from ** above Queue queue = QueueFactory.getDefaultQueue(); queue.add(withUrl("/taskq_demo").method(TaskOptions.Method.POST)); resp.getWriter().println("Task have been added to default queue..."); resp.getWriter().println("Refresh this page to add another count task"); } // Executed by TaskQueue @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // This is the body of the task for(int i = 0; i < 1000; i++) { log.info("Processing: " + req.getHeader("X-AppEngine-TaskName") + "-" + TASK_COUNTER++); try { // Sleep for a second (if the rate is set to 1/s this will allow at // most 1 more task to be processed) Thread.sleep(1000); } catch (InterruptedException e) { // ignore} } }} |
Очереди задач позволяют вам достичь некоторого уровня параллелизма в вашем приложении, вызывая фоновые процессы по требованию. Для очень длительных задач вы можете взглянуть на бэкэнды App Engine , которые в основном являются специальными экземплярами App Engine без ограничения времени запроса.
Ссылка: Google AppEngine: API очередей задач от нашего партнера JCG Луиса Атенсио из блога Reflective Thought .
