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 .