Migrar filas push para o Cloud Tasks fazendo upgrade para o SDK mais recente (Java)

Antes de fazer upgrade para a versão mais recente do SDK dos serviços do App Engine, consulte a visão geral da migração.

É possível migrar para o Cloud Tasks automaticamente atualizando o SDK dos serviços do App Engine para a versão mais recente. Depois do upgrade, o SDK redireciona automaticamente as chamadas PushQueue para as APIs de front-end do Cloud Tasks. O Cloud Tasks retém as filas e tarefas atuais, então nenhuma migração adicional é necessária.

Nos bastidores, o SDK atualizado usa as APIs do Cloud Tasks para manter a paridade de recursos com as filas de tarefas. O SDK oferece suporte ao seguinte:

  • Criação de tarefas em lote: o SDK usa APIs em lote para oferecer suporte à adição de até 100 tarefas em uma única chamada.
  • Novas tentativas no nível da tarefa: o SDK oferece suporte a configurações de novas tentativas específicas da tarefa.
  • Tarefas transacionais: o SDK enfileira tarefas em transações do Datastore. Para manter a confiabilidade, crie ou modifique o arquivo cron.yaml.

Preços e cotas

Migrar suas filas push para o Cloud Tasks pode afetar os preços e as cotas do seu aplicativo.

Preços

Consulte os preços do Cloud Tasks para estimar o custo mensal antes da migração.

Assim como nas filas de tarefas, o envio de solicitações para o aplicativo do App Engine com um destino push do Cloud Tasks é sem custo financeiro. No entanto, ao contrário das filas de tarefas, o Cloud Tasks cobra pela operação realizada, como criar, excluir ou gerenciar tarefas. Isso pode levar a um custo mensal geral maior em comparação com a fila de tarefas complementar do App Engine.

Cotas

As solicitações do Cloud Tasks também são contabilizadas nas cotas de solicitações do App Engine.

Assim como as filas de tarefas, o Cloud Tasks tem cotas específicas do serviço. A migração para o Cloud Tasks provavelmente mudará suas cotas.

Antes de começar

As seções a seguir discutem as considerações de custo e cota antes de migrar as filas push para o Cloud Tasks.

  1. Verifique se você tem acesso ao código-fonte do App Engine.

  2. Ative as APIs Cloud Tasks e Cloud Scheduler:

    Ativar APIs

  3. Para garantir que a conta de serviço do App Engine tenha as permissões necessárias para permitir que o SDK envie tarefas para a API Cloud Tasks, peça ao administrador para conceder o papel do IAM de Enfileirador do Cloud Tasks (roles/cloudtasks.enqueuer) no projeto.

Atualizar o SDK dos serviços do App Engine

  1. Verifique se o aplicativo usa a versão mais recente do SDK dos serviços do App Engine.

    No pom.xml, atualize o SDK dos serviços do App Engine para a versão v5.2.0-beta ou mais recente.

    
        com.google.appengine
        appengine-api-1.0-sdk
        v5.2.0-beta
    
  2. Ativar o roteamento do Cloud Tasks

    runtime: java25
    service: my-service-b
    
    env_variables:
      APPENGINE_USE_CLOUDTASK_PUSH_QUEUE: "true"
    

    Atualize a dependência do SDK do App Engine no pom.xml para a versão v5.2.0-beta ou mais recente.

    Se o aplicativo usar uma configuração XML (appengine-web.xml):

    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <service>my-java-service-b</service>
      <runtime>java25</runtime>
      <env-variables>
        <env-var name="APPENGINE_USE_CLOUDTASK_PUSH_QUEUE" value="true" />
      </env-variables>
    </appengine-web-app>
    
  3. Implante o aplicativo:

    gcloud app deploy
    
  4. Verifique as filas push no Cloud Tasks para confirmar se o aplicativo está usando o Cloud Tasks.

Configurar tarefas transacionais (opcional)

Se o aplicativo enfileirar tarefas em transações do Datastore, o SDK vai depender de um cron job interno para garantir que as tarefas que não forem enfileiradas durante o commit do Datastore sejam processadas.

Para processar tarefas transacionais de filas push, crie ou atualize o arquivo cron.yaml para chamar o processador interno periodicamente. Exemplo:

cron:
- description: "Process push queue transactional tasks"
  url: /_ah/cloudtask/sweep
  schedule: every 30 minutes # Change this based on the usage pattern

Adicione o mapeamento de URL no arquivo web.xml para utils.servlet.SweeperServlet ou utils.servlet.jakarta.SweeperServlet para ambientes de execução do Java 17/21 Jakarta EE.

<servlet>
 <servlet-name>cloudtask_sweep</servlet-name>
 <servlet-class>com.google.apphosting.utils.servlet.SweeperServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>cloudtask_sweep</servlet-name>
 <url-pattern>/_ah/cloudtask/sweep</url-pattern>
</servlet-mapping>

A seguir