Download the PHP package keepsuit/laravel-temporal without Composer
On this page you can find all versions of the php package keepsuit/laravel-temporal. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download keepsuit/laravel-temporal
More information about keepsuit/laravel-temporal
Files in keepsuit/laravel-temporal
Package laravel-temporal
Short Description Laravel temporal.io
License MIT
Homepage https://github.com/keepsuit/laravel-temporal
Informations about the package laravel-temporal
Laravel temporal.io
This package allow an easy integration of a Laravel app with a temporal.io, which is a distributed, scalable, durable, and highly available orchestration engine for asynchronous long-running business logic in a microservice architecture.
This package provides:
- Commands to create a new workflow, activity and interceptor
- Command to start the worker which will execute workflows and activities from the provided task queue
- Command to start a temporal dev server
- Testing helpers that allows mock of workflows and activities executions
Installation
You can install the package via composer:
Then download the latest roadrunner
executable for your platform:
or
[!NOTE] You should run this command after every update to ensure that you have the latest version of
roadrunner
executable.
You can publish the config file with:
This is the contents of the published config file:
Usage
Here we will see the utilities provided by this package. For more information about Temporal and Workflow/Activity options please refer to the official documentation.
Create workflows and activities
To create a new workflow, you can use the temporal:make:workflow {name}
command, which will create a new workflow interface & relative class in
the app/Temporal/Workflows
directory.
To create a new activity, you can use the temporal:make:activity {name}
command, which will create a new activity interface & relative class in
the app/Temporal/Activities
directory.
[!NOTE] If you already have workflow/activities in
app/Workflows
andapp/Activities
directories, the make commands will create the new workflow/activity in the these directories.
Workflows in app/Temporal/Workflows
and app/Workflows
and activities in app/Temporal/Activities
, app/Activities
, app/Temporal/Workflows
and app/Workflows
are automatically registered.
If you put your workflows and activities in other directories, you can register them manually in the workflows
and activities
config keys or with TemporalRegistry
in your service provider.
Build and start a workflow
To start a workflow, you must build a stub through the Temporal
Facade.
Build and start an activity
To start an activity, you must build a stub through the Temporal
Facade (note that activities must be built inside a workflow).
Activity methods returns a Generator, so you must use the yield
keyword to wait for the result.
Build and start a child workflow
Child workflows works like activity and like activities must be built inside a workflow.
Input and output payloads
Payloads provided to workflows/activities as params and returned from them must be serialized, sent to the Temporal server and deserialized by the worker. Activities can be executed by workers written in different languages, so the payload must be serialized in a common format. Out of the box temporal sdk supports native php types and protobuf messages. This package adds some laravel specific options for serialization/deserialization of objects:
TemporalSerializable
interface can be implemented to add support for custom serialization/deserialization.- Eloquent models can be correctly serialized/deserialized (with relations) adding
TemporalSerializable
interface andTemporalEloquentSerialize
trait. - spatie/laravel-data data objects are supported out of the box.
Spatie/Laravel-Data support
spatie/laravel-data
is a package that provides a simple way to work with data objects in Laravel.
In order to take full advantage of laravel-data
, it is suggested to use v4.3.0
or higher.
[!NOTE] The provided
TemporalSerializableCastAndTransformer
is compatible only withlaravel-data
v4.3
or higher, if you are using an older version you can create your cast/transform.
Changes to be made in config/data.php
:
Interceptors
Temporal interceptors are similar to laravel middleware and can be used to modify inbound and outbound SDK calls.
Interceptors can be registered in the interceptors
config key.
See temporal sdk v2.7 release notes for more information.
To create a new interceptor, you can use the temporal:make:interceptor {name}
command, which will create a new interceptor class in the app/Temporal/Interceptors
directory.
Run the temporal worker
To run the temporal worker, you can use the temporal:work {queue?}
command.
If you want to customize the options of the temporal worker, you can call Temporal::buildWorkerOptionsUsing
in your service provider:
Testing utilities
In order to test workflows end-to-end, you need a temporal server running. This package provides two options to run a temporal server for testing purposes:
- Run
temporal:server
command, which will start a temporal testing server and use theWithTemporalWorker
trait which will start a test worker - Use the
WithTemporal
trait, which will start a temporal testing server and the test worker when running test and stop it on finish
When using
WithTemporal
trait, you can setTEMPORAL_TESTING_SERVER
env variable tofalse
to disable the testing server and run only the worker.
Time skipping
The default temporal server implementation is the dev server included in the temporal cli and this doesn't support time skipping. In order to enable time skipping, you must:
- Run the
temporal:server
command with the--enable-time-skipping
flag. - Set
TEMPORAL_TESTING_SERVER_TIME_SKIPPING
env variable totrue
when usingWithTemporal
trait.
Mocking workflows
Mocking a workflow can be useful when the workflow should be executed in another service or simply when you want to test other parts of your code without running the workflow. This works for child workflows too.
Mocking activities
Mocking activities works like workflows, but for activity you must provide interface and the method to mock.
Assertions
Dispatches assertions can be done through the Temporal
facade but there are some downsides compared to the options above:
- You must provide the workflow/activity interface and method name, so this is duplicated
- If you want to ensure that the workflow/activity is executed on the correct queue, you must check the task queue yourself
PHPStan
This package provides a PHPStan extension to improve the experience when working with Temporal proxy classes.
If you have phpstan/extension-installer
installed, you are ready to go.
Otherwise, you have to add the extension to your phpstan.neon
file:
Testing
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
- Fabio Capucci
- All Contributors
License
The MIT License (MIT). Please see License File for more information.
All versions of laravel-temporal with dependencies
composer/class-map-generator Version ^1.0
illuminate/contracts Version ^10.0 || ^11.0
spatie/laravel-package-tools Version ^1.14.0
spiral/roadrunner Version ^2023.2 || ^2024.0
spiral/roadrunner-cli Version ^2.5
symfony/process Version ^6.0 || ^7.0
temporal/sdk Version ~2.7.4 || ~2.8.0 || ~2.9.0 || ~2.10.0 || ~2.11.0
thecodingmachine/safe Version ^2.0