2010-04-02 2 views
9
  • Existe-t-il un moyen de garantir l'exécution d'une tâche dans X minutes (ou après X min)? (taux signifierait les intervalles entre les tâches mais qu'en est-il de la première tâche, la première tâche commencerait-elle après le temps 'rate'?)
+0

i mis à jour le titre à être représentatif de la question réelle posée. –

Répondre

4

Si vous voulez dire 'au moins X minutes à partir de maintenant', oui - utilisez le task queue API.

+6

vous aurez envie de regarder le compte à rebours, qui fait exactement ce que vous voulez. –

1

Google a mis à jour cette partie de leur API (see here). Vous pouvez maintenant envoyer dans un 3ème paramètre avec PushTask contenant les options suivantes:

  1. 'méthode': string L'une des 'POST', 'GET', 'HEAD', 'PUT', 'DELETE'. Valeur par défaut: 'POST'. 'Nom': chaîne Nom de la tâche. Par défaut, cela signifie que le service générera un nom de tâche unique. 'Delay_seconds': float Temps d'attente minimum avant l'exécution de la tâche. Par défaut: zéro.
  2. 'header': string En-têtes supplémentaires à envoyer lorsque la tâche est exécutée.
2

En PHP

$task = new PushTask(
    '/some/callback', 
    ['param1' => $param1, 'param2' => $param2, 'param3' => $param3], 
    ['name'=>'EmailTask', 'method'=>'POST', 'delay_seconds'=>30] 
); 

Ou plus simplement (il est un POST par défaut)

$task = new PushTask(
    '/some/callback', 
    ['param1' => $param1, 'param2' => $param2, 'param3' => $param3], 
    ['delay_seconds'=>30] 
); 
+0

Plus d'infos ici: https://cloud.google.com/appengine/docs/standard/php/refdocs/classes/google.appengine.api.taskqueue.PushTask – lifeofguenter

0

Utilisation de l'API TaskQueue

public class Enqueue extends HttpServlet { 
    private static final Logger log = Logger.getLogger(Enqueue.class.getName()); 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String param1= request.getParameter("param1"); 
     String param2= request.getParameter("param2"); 
     String time = request.getParameter("time"); 
     int timer = Integer.parseInt(time) * 1000;//sec to millisec 
     log.info("Executing in "+ timer+" seconds"); 
     // Add the task to the default queue. 
     // Execute in 5 seconds 
    Queue queue = QueueFactory.getDefaultQueue(); 
      queue.add(TaskOptions.Builder.withUrl("/index1").param("param1", param1) 
        .param("param2", param2) 
        .countdownMillis(time)); 

     response.sendRedirect("/"); 
    } 
} 

définir maintenant le travail en classe Index1

public class Index1 extends HttpServlet { 
    private static final Logger log = Logger.getLogger(Index1.class.getName()); 

    @Override 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 
     String param1= req.getParameter("param1"); 
     String param2= req.getParameter("param2"); 

      log.info("Worker processing " + param1); 
/*Define job to be executed*/ 

    } 
    } 
Questions connexes