Skip to main content

nexus-app

Application kernel for Nexus actor applications. Provides a declarative API for registering actors and running them in single-process mode.

Namespace: Monadial\Nexus\App\

Classes

NexusApp

Builder for defining and running an actor application.

final class NexusApp
{
public static function create(string $name): self;
public function actor(string $name, Props $props): self;
public function onStart(callable $callback): self;
public function actors(): array;
public function run(Runtime $runtime): void;
}

Usage:

use Monadial\Nexus\App\NexusApp;
use Monadial\Nexus\Runtime\Swoole\SwooleRuntime;

NexusApp::create('my-app')
->actor('orders', Props::fromBehavior($orderBehavior))
->actor('payments', Props::fromBehavior($paymentBehavior))
->onStart(function (ActorSystem $system): void {
// Called after all actors are spawned
})
->run(new SwooleRuntime());

ActorDefinition

Immutable value object holding an actor's name and Props.

/** @psalm-immutable */
final readonly class ActorDefinition
{
public function __construct(
public string $name,
public Props $props,
) {}
}

Single-process vs multi-process

NexusApp::run() runs all actors in a single process. For multi-process scaling, use ClusterBootstrap from nexus-cluster-swoole instead:

// Single process
$app->run(new SwooleRuntime());

// Multi-process cluster
ClusterBootstrap::create(ClusterConfig::withWorkers(8))
->onWorkerStart(function (ClusterNode $node) use ($app): void {
foreach ($app->actors() as $definition) {
$node->spawn($definition->props, $definition->name);
}
})
->run();