Phluxor has two contexts,
Phluxor\ActorSystem\ActorContext
and Phluxor\ActorSystem\RootContext
.
These two contexts implement common features such as Spawner
, Stopper
, Infomation
, and Sender
.
In addition, ActorContext
implements additional features.
Phluxor\ActorSystem\ActorContext
and Phluxor\ActorSystem\RootContext
have a spawn
method.
Spawner
is a feature that creates a new actor from the Phluxor\ActorSystem\Props
object.
The Props
object is a configuration object for creating actors.
<?php
use Phluxor\ActorSystem;
use Phluxor\ActorSystem\Props;
$system = ActorSystem::create();
$spawned = $system->root()->spawn(
Props::fromProducer(
fn() => new YourActor()
)
);
see also Props - what are props?
Phluxor\ActorSystem\ActorContext
and Phluxor\ActorSystem\RootContext
have a stop
method.
A feature that allows you to stop an actor immediately or instruct it to stop after processing the current mailbox message.
stop
and poison
have several methods,
but these methods require a Phluxor\ActorSystem\Ref
object as an argument.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
public function receive(ContextInterface $context): void
{
$msg = $context->message();
$context->stop($context->sender());
$context->stop($context->self());
$context->stop(new Ref(new ActorSystem\ProtoBuf\Pid([
'id' => 'actor name',
])));
}
}
The info
is not a method, but a feature that provides information about the actor.
Phluxor\ActorSystem\ActorContext
and Phluxor\ActorSystem\RootContext
have information features.
Context information can be obtained,
such as the parent actor of the current actor,
the Phluxor\ActorSystem\Ref
of the current actor,
the Phluxor\ActorSystem\Ref
of the message sender actor,
and the Phluxor\ActorSystem
where the actor exists.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
public function receive(ContextInterface $context): void
{
$msg = $context->message(); // get message
$context->sender(); // get sender Ref
$context->self(); // get self Ref
$contex->parent(); // get parent Ref
$context->actorSystem(); // get actor system
$context->logger(); // get logger
// etc...
}
}
Phluxor\ActorSystem\ActorContext
and Phluxor\ActorSystem\RootContext
have a sender
method.
The send
method sends a fire-and-forget style message,
and the request
method provides the ability to asynchronously request a response from the destination actor.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
// implement receive method
public function receive(ContextInterface $context): void
{
// example - make a actor reference
$pid = new Ref(new Pid([
'id' => 'otherActor',
]));
// Of course,
// you can also use the spawn method to create an actor reference.
// fire-and-forget style message
$context->send($pid, new YourMessage('hello'));
// request style message
$context->request($pid, new YourMessage('hello'));
// future style message
$context->requestFuture($pid, new YourMessage('hello'), 1);
}
}
only Phluxor\ActorSystem\ActorContext
.
The receive
method is a feature that provides the ability to receive a message wrapped in a Phluxor\ActorSystem\Message\MessageEnvelope
.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
// implement receive method
public function receive(ContextInterface $context): void
{
$context->receive($envelope);
}
}
only Phluxor\ActorSystem\ActorContext
.
Supervision provides methods for controlling the lifecycle of child actors under supervision of the current actor
and the ability to escalate failures up to the next actor in a supervision hierarchy.