Асинхронные обработчики в Directum RX 3.3

27 1

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

  • фоновые процессы;
  • асинхронные обработчики.

Оба механизма разгружают сервер приложений, потому что выполняют вычисления за его пределами – на отдельном сервисе Worker.

Фоновые процессы предназначены для периодического выполнения работ, которые запускаются по расписанию. Их можно настроить и запустить, используя среду разработки Directum RX или клиентское приложение (с обложки модуля «Администрирование»). Фоновые процессы имеют историю выполнения, то есть можно посмотреть, выполнился процесс или нет. С помощью фонового процесса в Directum RX, например, создается задача для заполнения календаря рабочего времени.

Асинхронные обработчики являются новинкой версии Directum RX. Они предназначены для выполнения ресурсоемких операций, не требующих немедленного возврата результата. Одновременно можно выполнить вычисления нескольких асинхронных обработчиков в несколько потоков (распараллеливание вычислений). В Directum RX асинхронные обработчики используются, например, для автоматической выдачи прав доступа на документы.

Далее в статье мы расскажем о работе асинхронных обработчиков подробнее.

Как работает асинхронный обработчик

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

Схема работы

 

 
  1. В нужном месте серверного кода прикладной разработчик создает асинхронный обработчик, заполняет параметры и вызывает его. При этом выполнение серверного кода продолжается.
  2. Асинхронный обработчик отправляется на сервис Worker.
  3. На Worker, то есть за рамками основного потока, асинхронный обработчик выполняет свои вычисления. Если во время выполнения асинхронного обработчика возникает ошибка, то он повторяется в соответствии с интервалом, заданным разработчиком при его создании.

Пример добавления логики для асинхронного обработчика есть в справке.

Ситуация

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

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

 

Рассмотрим, какие настройки нужно задать для работы асинхронных обработчиков.

Настройка

Прежде всего, в соответствии с инструкцией необходимо вынести сервис асинхронных событий Worker на выделенный сервер.

Настройки сервиса асинхронных событий задаются в конфигурационном XML-файле, который находится в папке с агентом управления сервисами Directum RX.

Пример пути – :\inetpub\wwwroot\DrxServiceRunner\Сonf\DrxWorker_ConfigSettings.xml.

Для работы асинхронного обработчика в конфигурационном файле нужно дополнительно задать параметры:

  • HANDLED_MESSAGE_TYPES – типы сообщений, которые может обрабатывать текущий экземпляр сервиса;
  • ASYNC_HANDLERS_PARALLEL_COUNT – количество потоков, которые сервис может запустить параллельно для выполнения асинхронных обработчиков;
  • ASYNC_HANDLERS_PROCESSING – список уникальных идентификаторов асинхронных обработчиков, которые необходимо выполнять сервисом асинхронных событий.

Подробное описание параметров см. в справке.

***

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

Рустам Таов

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

Помимо того, что в конфиге сервиса Worker3, который обрабатывает процессы по синхронизации данных с 1С, в параметре ASYNC_HANDLERS_PROCESSING надо указать список уникальных идентификаторов асинхронных обработчиков, которые будет выполнять Worker3, также  необходимо в конфигах Worker1 и Worker2 в параметре ASYNC_HANDLERS_EXCLUDED указать эти же уникальные идентификаторы асинхронных обработчиков, которые не требуется выполнять (или другой вариант заполнить  параметр ASYNC_HANDLERS_PROCESSING списком всех прочих уникальных идентификаторов асинхронных обработчиков). 

Без этой настройки сервисы Worker1 и Worker2 будут брать в обработку процессы по синхронизации данных с 1С и будут падать т.к. у них отсутствует ПО.

Авторизуйтесь, чтобы написать комментарий