Orchestration Layer
The PHP orchestration layer for distributed systems — Orchestrators, Sagas, Distributed Bus, Service Map, and EIP primitives on Laravel and Symfony
The Problem You Recognize
What the Industry Calls It
How Ecotone Solves It
Orchestrators — declarative multi-step workflows (Enterprise)
final class OrderFulfillmentOrchestrator
{
#[Orchestrator(inputChannelName: 'order.fulfill')]
public function plan(PlaceOrder $order): array
{
return $order->isDigital()
? ['order.charge', 'order.deliver_digital', 'order.notify']
: ['order.charge', 'order.reserve_stock', 'order.ship', 'order.notify'];
}
#[InternalHandler(inputChannelName: 'order.charge')]
public function charge(PlaceOrder $order, PaymentService $payments): PlaceOrder { /* ... */ return $order; }
#[InternalHandler(inputChannelName: 'order.ship')]
public function ship(PlaceOrder $order, ShippingService $shipping): PlaceOrder { /* ... */ return $order; }
// ...
}Sagas — stateful process managers
Stateless workflows — chained handlers
Distributed Bus + Service Map — service-to-service orchestration
EIP primitives — composable message routing
Multi-tenant routing in one deployment
How It Compares
Dimension
Camunda / Zeebe + PHP client
Symfony Messenger + custom state machine
Ecotone
Next Steps
Last updated
Was this helpful?