Причины встроить активности сразу в отдельный сервис:
- Длительные операции: не существует стандартного и простого способа реализовать длительную операцию в службе RPC. Если действие может занять несколько минут или больше, обычно ожидается, что оно будет биться, чтобы обеспечить своевременный тайм-аут. Клиентская библиотека Cadence напрямую поддерживает пульсацию.
- Управление потоком: конфигурация рабочего процесса Cadence указывает максимальную скорость потребления и максимальное количество действий, обрабатываемых одновременно. Рабочий процесс Cadence — это, по сути, потребитель очереди, который получает новые задачи активности только тогда, когда у него есть возможность работать с ними в соответствии с конфигурацией. Когда действие вызывает удаленную службу, это управление потоком теряется. При перегрузке удаленная служба может только не выполнить запрос. Активность каденции в этом случае поддерживает экспоненциальное повторение, но полагаться на сбои и повторные попытки для управления потоком — явно худшее решение.
Бывают случаи, когда встраивание невозможно:
- Вызов внешних сервисов: Часто рабочий процесс должен зависеть от существующих служб, которые не могут встраивать действия Cadence. В этом случае действие, вызывающее внешнюю службу, является единственным вариантом. Для управления потоком обязательно укажите экспоненциальную политику повторных попыток (включая список неповторяемых ошибок) при выполнении действия. Для длительных операций смоделируйте вызов как два действия. Первый вызывает API начни что угодно, а второй запрашивает результат в цикле внутри функции активности. Действие Поллфоррезультат должно возвращаться в службу Cadence, чтобы убедиться, что оно будет повторено, если рабочий процесс, на котором он размещен, выйдет из строя.
- Неподдерживаемый язык программирования: Если вам нужно реализовать действие на языке, который до сих пор не имеет соответствующей клиентской библиотеки Cadence, то наиболее простым вариантом является частое предоставление этой функции как службы.