Обзор асинхронной обработки в Salesforce

При запуске процесса в Salesforce первый вопрос, который следует задать, – это выполнить его синхронно или асинхронно. Если задачу можно отложить и она не требует немедленного результата, всегда целесообразно использовать асинхронные процессы Salesforce, поскольку они предлагают значительные преимущества для вашей технической архитектуры.

Что такое асинхронная обработка?

Асинхронные процессы выполняются в собственном потоке, позволяя задаче завершиться без ожидания пользователя. Вот основные преимущества:

1. Улучшенный пользовательский опыт и производительность

Поскольку асинхронные процессы выполняются в фоновом режиме, пользователи не должны ожидать их завершения. Это позволяет пользователям продолжать работу без прерываний, улучшая время загрузки страниц и общую производительность системы.

2. Более высокие лимиты

Salesforce устанавливает строгие ограничения на синхронные транзакции, такие как количество запросов или операций DML на транзакцию. Асинхронная обработка предоставляет дополнительные лимиты выполнения, предоставляя вам больше возможностей для масштабирования ваших операций.

3. Масштабируемость

Перекладывая сложные или требовательные к ресурсам задачи на выполнение в фоновом режиме, асинхронная обработка помогает вашему бизнесу эффективно масштабироваться, не ущемляя производительность системы.

Вот различные инструменты, которые Salesforce предоставляет для асинхронной обработки.

Ключевые моменты

До сих пор мы изучали асинхронную обработку, её преимущества и различные инструменты, которые Salesforce предоставляет для этих задач. Однако есть несколько важных факторов, которые необходимо учитывать перед выбором асинхронной обработки для нужд вашего бизнеса.

1. Асинхронная обработка не имеет SLA

Имейте в виду, что асинхронные процессы не имеют гарантированного Соглашения об уровне обслуживания (SLA). Они выполняются в своем собственном потоке, когда ресурсы становятся доступными, что означает, что нет гарантии, что задача будет завершена в определенные сроки. Поэтому важно избегать использования асинхронной обработки для бизнес-процессов, которые чувствительны ко времени.

2. Выберите правильный инструмент для задачи

Как уже упоминалось, Salesforce предлагает различные инструменты для асинхронной обработки, каждый из которых предназначен для разных случаев использования. Понимание сильных и слабых сторон каждого инструмента поможет вам выбрать наиболее подходящий для ваших конкретных нужд.

3. Оптимизируйте ваш код

Хотя Salesforce предоставляет более высокие лимиты выполнения для асинхронных процессов, все равно критически важно оптимизировать ваши операции. Это гарантирует, что ваш код сможет эффективно обрабатывать несколько записей, оставаясь в пределах лимитов платформы и поддерживая производительность.

4. Реализация обработки ошибок и мониторинга

Поскольку асинхронные задачи выполняются в фоновом режиме, надежная обработка ошибок и мониторинг являются важными. Используйте блоки try-catch и регистрируйте ошибки в пользовательских объектах для удобного отслеживания. Кроме того, реализуйте логику повтора для управления временными сбоями, такими как проблемы с вызовом API, чтобы обеспечить надежность ваших процессов.

Глубокий анализ асинхронных инструментов

Давайте ближе рассмотрим каждый из асинхронных инструментов в Salesforce.

Методы Future

Методы Future используются для операций, которые могут работать независимо в собственном потоке. Одним из распространенных случаев использования является выполнение внешних вызовов веб-сервисов, где пользователю не нужно ждать завершения операции.

Для определения метода Future просто аннотируйте метод аннотацией @future.

Java

 

public class FutureClass {
@future
 public static void myFutureMethod(list recordIds){
   //код долгой операции
 }  
}

Основные моменты о методах Future:

  • Статические. Методы Future должны быть статическими.
  • Тип возврата void. Они могут возвращать только void.
  • Примитивные типы данных. Методы Future могут принимать только примитивные типы данных (например, String, Integer, Id). Они не могут принимать сложные объекты в качестве параметров.
  • Вызовы. Если метод Future должен делать вызов веб-сервиса, вы должны включить атрибут callout=true в аннотации, чтобы разрешить методу выполнять вызов.
Java

 

public class FutureClass {
@future(callout = true)
 public static void myFutureMethod(){
   //вызов здесь
 }  
}

Queueable Apex

Подобно будущим методам, Queueable Apex позволяет запускать операции в собственном потоке, что делает его идеальным для длительных задач. Он использует очередь заданий Apex и предоставляет более гибкий и мощный подход к асинхронной обработке по сравнению с будущими методами.

Для реализации Queueable Apex ваш класс должен реализовывать интерфейс Queueable. Класс всегда должен определять метод execute, который содержит логику асинхронной операции.

Java

 

public class QueueableClass implements Queueable{
public void execute(QueueableContext context){
  //длительная операция
}
}

Вы можете выполнить Queueable Apex, вызвав System.enqueueJob(), который добавляет задание в очередь и возвращает идентификатор задания. Этот идентификатор задания можно использовать для отслеживания статуса задания путем запроса объекта AsyncApexJob.

Java

 

ID jobID = System.enqueueJob(new QueueableClass());

Основные моменты о Queueable Apex:

  • Непримитивные типы данных. В отличие от будущих методов, вы можете использовать непримитивные типы данных в качестве переменных-членов в классе Queueable.
  • Цепочка заданий. Задания Queueable могут быть объединены в цепочку, позволяя вам запустить второе задание из уже выполняющегося, создавая последовательность асинхронных операций.

Пакетный Apex

Когда вам необходимо выполнять асинхронные операции над большим количеством записей, Пакетный Apex является идеальным решением. Он разбивает вашу большую базу данных на более мелкие, управляемые куски для обработки.

Для реализации Batch Apex ваш класс должен реализовывать интерфейс Database.Batchable. Класс Batch Apex должен определять три метода: start, execute и finish.

1. Метод Start

Этот метод выполняется в начале пакетной задачи. Он должен содержать SOQL-запрос для сбора большого набора данных и возвращать QueryLocator. Лимит правительства на общее количество записей, извлекаемых запросом SOQL, обходится в методе start при использовании Batch Apex.

Java

 

public Database.QueryLocator start(Database.BatchableContext bc) {}

2. Метод Execute

Метод execute вызывается для каждой порции записей. Обратите внимание, что порядок обработки записей не гарантирован.

Java

 

public void execute(Database.BatchableContext bc, list<Object>){}

3. Метод Finish

Метод finish вызывается после обработки всех порций записей. Обычно он используется для постобработки, например, для отправки уведомлений по электронной почте. Каждое выполнение пакетной задачи считается отдельной транзакцией, и лимиты правительства сбрасываются для каждой порции.

Для запуска пакетной задачи используйте метод Database.executeBatch. Это добавляет задачу пакета в асинхронную очередь.

Метод Database.executeBatch принимает два параметра:

  1. Экземпляр класса Batch Apex.
  2. Необязательный параметр размера пакета, который указывает количество записей в пакете. Максимальный размер пакета, который можно указать, – 2000.
Java

 

ID batchprocessid = Database.executeBatch(new BatchApex(),2000);

Лучшие практики при использовании асинхронного Apex

Избегайте вызова методов Future или Queueable в процессах с высоким объемом

Будьте осторожны при вызове методов Future или Queueable из процессов, которые могут исчерпать дневные асинхронные лимиты, таких как триггеры Apex. Эти процессы могут быстро исчерпать доступные асинхронные ресурсы.

Оптимизируйте производительность

Убедитесь, что производительность методов Future или Queueable оптимизирована. Это включает в себя:

  • Оптимизацию запросов для сокращения времени обработки.
  • Минимизацию длительности вызовов веб-сервисов.
  • Упрощение любой связанной логики, такой как триггеры или потоки, чтобы избежать узких мест.

Используйте Batch Apex для больших объемов данных

Для обработки большого количества записей всегда предпочтительнее использовать Batch Apex, чем методы Future или Queueable. Batch Apex разработан для эффективной работы с массивами данных, в то время как методы Future и Queueable лучше подходят для более мелких задач.

Queueable Apex предоставляет большую гибкость

Queueable Apex предлагает больше контроля над выполнением заданий по сравнению с методами Future, такими как возможность связывать задания друг с другом или более эффективно обрабатывать большие объемы данных.

Заключение

В заключение, асинхронный Apex в Salesforce – мощный инструмент для обработки долгих и ресурсоемких процессов при сохранении производительности системы и опыта пользователя. Понимая различные доступные асинхронные методы – такие как Future Methods, Queueable Apex и Batch Apex – и следуя bew practices, вы можете разрабатывать эффективные, масштабируемые решения, которые оптимизируют как ваш код, так и ресурсы вашей системы. Помните учитывать такие факторы как ограничения правительства, оптимизация производительности и обработка ошибок, чтобы гарантировать плавное и надежное выполнение ваших асинхронных задач.

Source:
https://dzone.com/articles/asynchronous-processing-salesforce-overview