Lorsque vous exécutez un processus dans Salesforce, la première question à vous poser est de savoir s’il faut l’exécuter de manière synchrone ou asynchrone. Si la tâche peut être différée et ne nécessite pas de résultat immédiat, il est toujours avantageux de tirer parti des processus asynchrones de Salesforce, car ils offrent des avantages significatifs à votre architecture technique.
Qu’est-ce que le traitement asynchrone?
Les processus asynchrones s’exécutent dans leur propre fil d’exécution, permettant à la tâche de se terminer sans faire attendre l’utilisateur. Voici les principaux avantages :
1. Expérience utilisateur et performances améliorées
Étant donné que les processus asynchrones s’exécutent en arrière-plan, les utilisateurs n’ont pas à attendre leur achèvement. Cela leur permet de poursuivre leur travail sans interruption tout en améliorant les temps de chargement des pages et les performances globales du système.
2. Limites plus élevées
Salesforce impose des limites strictes aux transactions synchrones, telles que le nombre de requêtes ou d’opérations DML par transaction. Le traitement asynchrone offre des limites d’exécution supplémentaires, vous donnant plus de marge pour faire évoluer vos opérations.
3. Scalabilité
En déchargeant les tâches complexes ou gourmandes en ressources pour les exécuter en arrière-plan, le traitement asynchrone aide votre entreprise à se développer efficacement sans compromettre les performances du système.
Voici les différents outils que Salesforce propose pour le traitement asynchrone.
Considérations clés
Jusqu’à présent, nous avons exploré le traitement asynchrone, ses avantages, et les divers outils que Salesforce propose pour ces tâches. Cependant, il existe plusieurs facteurs importants à considérer avant de choisir le traitement asynchrone pour vos besoins commerciaux.
1. Le Traitement Asynchrone n’a pas de SLA
Gardez à l’esprit que les processus asynchrones n’ont pas de Service Level Agreement (SLA) garanti. Ils s’exécutent dans leur propre fil d’exécution dès que des ressources sont disponibles, ce qui signifie qu’il n’y a aucune garantie que la tâche se terminera dans un délai spécifique. Par conséquent, il est important d’éviter d’utiliser le traitement asynchrone pour les flux commerciaux qui sont sensibles au temps.
2. Choisissez le Bon Outil pour la Tâche
Comme mentionné précédemment, Salesforce propose divers outils pour le traitement asynchrone, chacun conçu pour des cas d’utilisation différents. Comprendre les forces et les limites de chaque outil vous aidera à sélectionner celui le plus adapté à vos besoins spécifiques.
3. Optimisez Votre Code pour les Traitements en Lot
Alors que Salesforce offre des limites d’exécution plus élevées pour les processus asynchrones, il est toujours essentiel d’optimiser vos opérations. Cela garantit que votre code peut gérer efficacement de multiples enregistrements, rester dans les limites de la plateforme et maintenir les performances.
4. Mettre en place la gestion des erreurs et la surveillance
Étant donné que les tâches asynchrones s’exécutent en arrière-plan, une gestion des erreurs et une surveillance robustes sont essentielles. Utilisez des blocs try-catch
et enregistrez les erreurs dans des objets personnalisés pour un suivi plus facile. De plus, mettez en place une logique de réessayage pour gérer les échecs intermittents, tels que les problèmes d’appel d’API, afin d’assurer la fiabilité de vos processus.
Approfondissement des Outils Asynchrones
Penchons-nous sur chacun des outils asynchrones dans Salesforce.
Méthodes Future
Les méthodes Future sont utilisées pour des opérations pouvant s’exécuter de manière indépendante dans leur propre thread. Un cas d’utilisation courant est l’exécution d’appels de services web externes où l’utilisateur n’a pas besoin d’attendre la fin de l’opération.
Pour définir une méthode Future, il suffit d’annoter la méthode avec l’annotation @future
.
public class FutureClass {
@future
public static void myFutureMethod(list recordIds){
//code de l'opération longue
}
}
Points clés concernant les méthodes Future :
- Statique. Les méthodes Future doivent être statiques.
- Type de retour Void. Elles ne peuvent retourner que
void
. - Types de données primitifs. Les méthodes Future ne peuvent accepter que des types de données primitifs (par ex.
String
,Integer
,Id
). Elles ne peuvent pas prendre d’objets complexes en tant que paramètres. - Appels. Si la méthode Future doit effectuer un appel de service web, vous devez inclure l’attribut
callout=true
dans l’annotation pour permettre à la méthode d’effectuer l’appel.
public class FutureClass {
@future(callout = true)
public static void myFutureMethod(){
//appel ici
}
}
Apex Mis en File d’Attente
Similaire aux méthodes futures, Queueable Apex vous permet d’exécuter des opérations dans leur propre thread, ce qui le rend idéal pour les tâches longues. Il exploite la file d’attente des travaux Apex et offre une approche plus flexible et puissante du traitement asynchrone par rapport aux méthodes futures.
Pour mettre en œuvre Queueable Apex, votre classe doit implémenter l’interface Queueable
. La classe doit toujours définir une méthode execute
, qui contient la logique de l’opération asynchrone.
public class QueueableClass implements Queueable{
public void execute(QueueableContext context){
//opération longue durée
}
}
Vous pouvez exécuter Queueable Apex en appelant System.enqueueJob()
, qui ajoute le travail à la file d’attente et renvoie un ID de travail. Cet ID de travail peut être utilisé pour surveiller le statut du travail en interrogeant l’objet AsyncApexJob
.
ID jobID = System.enqueueJob(new QueueableClass());
Points clés sur Queueable Apex:
- Types de données non primitifs. Contrairement aux méthodes futures, vous pouvez utiliser des types de données non primitifs en tant que variables membres dans une classe Queueable.
- Enchaînement de travaux. Les travaux Queueable peuvent être enchaînés, vous permettant de démarrer un deuxième travail à partir d’un travail déjà en cours d’exécution, créant ainsi une séquence d’opérations asynchrones.
Batch Apex
Lorsque vous avez besoin d’exécuter des opérations asynchrones sur un grand nombre d’enregistrements, Batch Apex est la solution idéale. Il divise votre grand jeu de données en plus petits morceaux gérables pour le traitement.
Pour implémenter Batch Apex, votre classe doit implémenter l’interface Database.Batchable
. La classe Batch Apex doit définir trois méthodes : start
, execute
, et finish
.
1. Méthode Start
Cette méthode est exécutée au début du travail par lots. Elle doit contenir la requête SOQL pour collecter le grand ensemble de données et renvoyer un QueryLocator
. La limite du gouverneur sur le nombre total d’enregistrements récupérés par une requête SOQL est contournée dans la méthode start
lors de l’utilisation de Batch Apex.
public Database.QueryLocator start(Database.BatchableContext bc) {}
2. Méthode Execute
La méthode execute
est appelée pour chaque lot d’enregistrements. Notez que l’ordre dans lequel les enregistrements sont traités n’est pas garanti.
public void execute(Database.BatchableContext bc, list<Object>){}
3. Méthode Finish
La méthode finish
est appelée après que tous les lots d’enregistrements ont été traités. Elle est généralement utilisée pour des tâches de post-traitement, telles que l’envoi de courriels de notification. Chaque exécution du travail par lots est considérée comme une transaction unique, et les limites du gouverneur sont réinitialisées pour chaque lot.
Pour déclencher un travail par lots, utilisez la méthode Database.executeBatch
. Cela ajoute le travail par lots à la file d’attente asynchrone.
La méthode Database.executeBatch
prend deux paramètres :
- Une instance de la classe Batch Apex.
- Un paramètre de taille de lot facultatif, qui spécifie le nombre d’enregistrements par lot. La taille de lot maximale que vous pouvez spécifier est 2000.
ID batchprocessid = Database.executeBatch(new BatchApex(),2000);
Meilleures Pratiques Lors de l’Utilisation d’Apex Asynchrone
Évitez de déclencher des méthodes futures ou en file d’attente dans des processus à haut volume
Soyez prudent lorsque vous déclenchez des méthodes futures ou en file d’attente à partir de processus qui pourraient épuiser les limites asynchrones quotidiennes, comme les déclencheurs Apex. Ces processus peuvent rapidement consommer les ressources asynchrones disponibles.
Optimisez les performances
Assurez-vous d’optimiser les performances des méthodes futures ou en file d’attente. Cela comprend :
- Optimiser les requêtes pour réduire le temps de traitement.
- Minimiser les durées des appels de services web.
- Rationaliser toute logique associée, tels que les déclencheurs ou les flux, pour éviter les goulots d’étranglement.
Utilisez Batch Apex pour les grands volumes de données
Pour le traitement d’un grand nombre d’enregistrements, préférez toujours Batch Apex aux méthodes futures ou en file d’attente. Batch Apex est conçu pour gérer efficacement des ensembles de données massifs, tandis que les méthodes futures et en file d’attente conviennent mieux aux tâches plus petites.
Queueable Apex offre une plus grande flexibilité
Queueable Apex offre plus de contrôle sur l’exécution des travaux par rapport aux méthodes futures, comme la possibilité de chaîner des travaux ensemble ou de gérer des volumes de données plus importants de manière plus efficace.
Conclusion
En conclusion, l’Apex asynchrone dans Salesforce est un outil puissant pour gérer des processus longs et gourmands en ressources tout en maintenant les performances du système et l’expérience utilisateur. En comprenant les différentes méthodes asynchrones disponibles – telles que les Méthodes Future, Apex en file d’attente et Apex par lots – et en suivant les meilleures pratiques, vous pouvez concevoir des solutions efficaces et évolutives qui optimisent à la fois votre code et les ressources de votre système. N’oubliez pas de prendre en compte des facteurs tels que les limites du gouverneur, l’optimisation des performances et la gestion des erreurs pour garantir que vos tâches asynchrones s’exécutent de manière fluide et fiable.
Source:
https://dzone.com/articles/asynchronous-processing-salesforce-overview