Nesta página, descrevemos como criar tarefas e colocá-las em filas push. Quando quiser processar uma tarefa, você precisará criar um novo objeto de tarefa e colocá-lo em uma fila. É possível especificar explicitamente o serviço e o gerenciador que processam a tarefa e, como opção, passar dados específicos da tarefa para o gerenciador. Também é possível ajustar a configuração da tarefa, como agendá-la caso ela precise ser executada posteriormente ou limitar o número de vezes que a tarefa será repetida se falhar.
Como criar uma nova tarefa
Para criar e enfileirar uma tarefa, crie um objeto PushTask e chame o método add()
dele. É possível adicionar a uma fila especificada em queue.yaml
fornecendo um argumento de nome de fila para add()
. Como alternativa, chamar add()
sem argumentos vai adicionar a tarefa à fila padrão.
Também é possível adicionar tarefas em lote a uma fila. Basta usar PushQueue. No exemplo a seguir, dois objetos PushTask são adicionados a uma PushQueue pelo método addTasks()
.
Na amostra de código a seguir, mostramos como adicionar uma tarefa:
Na amostra de código a seguir, mostramos como adicionar várias tarefas de uma vez:
Ao usar PushTask
e PushQueue
, inclua estas instruções na parte superior do arquivo PHP:
Como especificar o serviço de worker
Quando uma tarefa é retirada da fila, o serviço de fila de tarefas a envia para um serviço de worker. Cada tarefa tem um destino e um url, que determinam o serviço e o gerenciador que realizarão a tarefa.
target
O destino especifica o serviço que receberá a solicitação HTTP para executar a tarefa. É uma string que especifica um serviço/versão/instância em qualquer uma das formas canônicas. As formas mais usadas são estas:
service
version.service
instance.version.service
A string de destino precede o nome de domínio do aplicativo. Há três maneiras de definir o destino de uma tarefa:
Declarar o destino ao construir a tarefa. É possível definir o destino explicitamente ao criar a tarefa usando o parâmetro header na matriz
$options
ao construir o objeto PushTask:$task = new PushTask( '/worker', [], ['header' => "Host: versionHostname"]);
Incluir uma diretiva
target
ao definir uma fila emqueue.yaml
, como na definição dequeue-blue
. Todas as tarefas incluídas em uma fila com umtarget
terão esse destino, mesmo que outro destino seja atribuído à tarefa no momento da criação.Se nenhum destino for especificado de acordo com um dos dois métodos anteriores, o destino da tarefa será a versão do serviço que a põe em fila. Se você colocar em fila uma tarefa do serviço e versão padrões dessa maneira, e a versão padrão mudar antes da execução da tarefa, esta será executada na nova versão padrão.
url
Com url
, um dos gerenciadores no serviço de destino é selecionado para a execução da tarefa.
O url
precisa corresponder a um dos padrões de URL do gerenciador no serviço de destino. O url
poderá incluir parâmetros de consulta se o método especificado na tarefa for GET
ou PULL
. Se nenhum url
for especificado, será usado o URL /_ah/queue/[QUEUE_NAME]
padrão, em que [QUEUE_NAME]
corresponde ao nome da fila da tarefa.
Como passar dados ao gerenciador
É possível passar dados como parâmetros de consulta ao gerenciador no URL da tarefa, mas somente se o método especificado na tarefa for GET
ou PULL
.
O construtor PushTask
tem um argumento posicional para query_data.
Os dados geralmente são um dicionário de pares de chave-valor. Se o método da tarefa for POST
ou PUT
, os dados serão adicionados ao payload da solicitação HTTP. Se o método for GET, ele será adicionado ao URL como parâmetros de consulta.
Como nomear uma tarefa
Quando você cria uma nova tarefa, o App Engine atribui a ela um nome exclusivo por padrão. Porém, é possível atribuir à tarefa um nome de sua escolha usando o parâmetro name
. Uma vantagem de escolher os nomes que serão atribuídos às tarefas é a remoção de duplicações, o que significa que é possível usar os nomes de tarefas para garantir que a tarefa seja adicionada apenas uma vez. A remoção de duplicações continua por nove dias após a conclusão ou exclusão da tarefa.
Observe que essa lógica de remoção de duplicações apresenta uma sobrecarga de desempenho significativa, resultando em maiores latências e taxas de erro potencialmente maiores associadas a tarefas nomeadas. Esses custos poderão aumentar significativamente se os nomes das tarefas forem sequenciais, como no caso de carimbos de data/hora. Então, se você mesmo atribuir os nomes, recomendamos usar um prefixo bem distribuído para nomes de tarefas, como um hash do conteúdo.
Se você mesmo atribuir nomes às tarefas, observe que o comprimento máximo do nome é 500 caracteres. O nome pode conter letras maiúsculas e minúsculas, sublinhados de números e hifens.
A seguir
- Saiba como criar gerenciadores de tarefas.