Sagas, orchestrators, chained workflows, outbox, and #[Delayed] saga timeouts — on the database and broker you already operate. No separate workflow service. Plain PHP classes with attributes.
Composer package · Laravel or Symfony · PostgreSQL or MySQL · RabbitMQ, Kafka, SQS, Redis, or DBAL outbox
Crash-resistant multi-step processes on your existing database and broker. Sagas, orchestrators, chained workflows, outbox, and #[Delayed] timeouts — plain PHP attributes, no separate workflow service, no replay-deterministic DSL.
Stateful long-running processes with compensation. Handler-chaining workflows for stateless pipelines. Saga timeouts in one #[Delayed] attribute. All declarative, all attribute-driven.
Transactional outbox, DBAL dead-letter queue with replay, retries with exponential backoff, deduplication, OpenTelemetry on every handler — default behaviour, not assembly required.
A copy of the message is dispatched to every handler. Each retries independently, fails independently — no shared envelope, no sibling re-runs. One failing subscriber doesn't abort the others.
Aggregate publishes event. Saga subscribes by attribute. Projection subscribes by attribute. Async handler subscribes by attribute. The attribute is the wiring.
Each row names what you'd need to add to match Ecotone, and the architectural ceiling that integration cannot fix.
A Temporal cluster, RoadRunner, gRPC, and a deterministic-replay DSL.
Laravel-only; workflow-only; no first-class sagas as process managers.
Retry is per-transport, not per-handler. No saga.
A job runner. No saga state, no workflow durability primitives.
Workflows that grow from one saga to a distributed orchestration topology.
Haven’t found what you’re looking for? Contact us
Unleash the power of Messaging in PHP
and push productivity to the higher level
