Aucune programmation n'est nécessaire pour recevoir les messages du planificateur intégré. Créez une nouvelle définition de tâche dans Dashboard et un service donné sera invoqué à chaque fois que son exécution est programmée. Toutes les données supplémentaires fournies dans la définition d'un travail seront disponibles pour le service dans self.request.raw_request
.
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class MyService(Service):
def handle(self):
self.logger.info('Message received: %s', self.request.raw_request)
Utilisez l'API pratique ci-dessous pour planifier des tâches ponctuelles. Par exemple, dans cet exemple, nous planifions un autre service à invoquer à un moment précis.
Le paramètre "prefix" permet de retrouver facilement la tâche dans le tableau de bord et les logs.
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class MyTarget(Service):
def handle(self):
self.logger.warn('I was invoked with %s', self.request.input)
class Scheduler(Service):
def handle(self):
# This can be used to make it easier to understand which scheduled job is which
prefix = 'user@example.com'
# This is what the target service is going to receive on input
data = {
'my.key': 'my.value'
}
# This is when the job should start, note that the time must be in UTC
start_date = '2027-07-29 11:35:49'
# This is the call that schedules the job
self.schedule.onetime(self, MyTarget, prefix=prefix, start_date=start_date, data=data)
Invoquez le service intégré zato.scheduler.job.create
pour planifier des tâches basées sur des intervalles ou de type cron.
# stdlib
from datetime import datetime
# Zato
from zato.server.service import Service
class MyService(Service):
def handle(self):
#
# We schedule a cron-style job here that will run once per hour (@hourly)
#
request = {
'cluster_id': self.server.cluster_id,
'name': 'my-job-1',
'is_active': True,
'service': 'zato.ping',
'job_type': 'cron_style',
'start_date': datetime.utcnow().isoformat(), # Always in UTC
'cron_definition': '@hourly'
}
self.invoke('zato.scheduler.job.create', request)