Wolfy-J
Новичок
Привет!
Мы написали инструмент который считаем достаточно полезным PHP комьюнити. Это асинхронный PHP воркфлоу движок написаный для работы с API Temporal.io (MIT лицензированный Workflow движок с Event Sourcing используемый Uber, Coinbase, Hashicorp).
Если кратко, это такая штука которая позволяем вам относительно просто писать сложные бизнес процессы - платежы, корзины пользователя, подписки, обработку видео, логистику и тому подобное. Причем делать это масштабируемо и отказоусточиво.
Например можно сделать не один крон в системе, а по одному крону на пользователя, или заснуть на 30 дней:
Даже в случае падения воркера система восстановит стейт процесса используя историю действий. Из коробки - таймеры, корутины, асинхронные вызовы, авто-повторы и т.д.
Документация в процессе, но код стабилен.
Примеры можно найти тут: https://github.com/temporalio/samples-php
SDK: https://github.com/temporalio/sdk-php
Интеграция с RoadRunner: https://github.com/temporalio/roadrunner-temporal
-
Команда Спираль Скаут
Мы написали инструмент который считаем достаточно полезным PHP комьюнити. Это асинхронный PHP воркфлоу движок написаный для работы с API Temporal.io (MIT лицензированный Workflow движок с Event Sourcing используемый Uber, Coinbase, Hashicorp).
Если кратко, это такая штука которая позволяем вам относительно просто писать сложные бизнес процессы - платежы, корзины пользователя, подписки, обработку видео, логистику и тому подобное. Причем делать это масштабируемо и отказоусточиво.
Например можно сделать не один крон в системе, а по одному крону на пользователя, или заснуть на 30 дней:
PHP:
public function subscribe(string $userID)
{
yield $this->account->sendWelcomeEmail($userID);
try {
$trialPeriod = true;
while (true) {
// Заснуть на 30 дней
yield Workflow::timer(CarbonInterval::days(30));
// списать сумму
yield $this->account->chargeMonthlyFee($userID);
if ($trialPeriod) {
yield $this->account->sendEndOfTrialEmail($userID);
$trialPeriod = false;
continue;
}
yield $this->account->sendMonthlyChargeEmail($userID);
}
} catch (CanceledFailure $e) {
// откат подписки
yield Workflow::asyncDetached(
function () use ($userID) {
yield $this->account->processSubscriptionCancellation($userID);
yield $this->account->sendSorryToSeeYouGoEmail($userID);
}
);
}
}
Документация в процессе, но код стабилен.
Примеры можно найти тут: https://github.com/temporalio/samples-php
SDK: https://github.com/temporalio/sdk-php
Интеграция с RoadRunner: https://github.com/temporalio/roadrunner-temporal
-
Команда Спираль Скаут
Последнее редактирование: