Phluxor

Routes

ルーターは、メッセージをルーティー(routees/ルート対象)として作用するアクターにルーティングする
特殊なタイプのアクターです。

ルーターによって、メッセージを効率的にルーティングするための戦略が異なります。

ルーターはアクターの内側でも外側でも使用でき、
ルーティーを自分で管理することも、
構成機能を備えた自己完結型のルーターアクターを使用することもできます。

Phluxorでは、あらかじめ用意されているルーターを使用して、
アプリケーションの要件に合わせたルーティングを行うことができます。

もちろん、独自のルーターを作成することもできます。

ルーターに送信されたメッセージは、そのルーターのルーティーの1つに転送されますが、
例外がひとつだけあります。
特別な Phluxor\Router\Message\Broadcastを用いるとすべてのルーティング先に送信されます。

ラウンドロビンルーターを使用して5つのワーカーを展開する例を示します。

use Phluxor\ActorSystem;
use Phluxor\Router\RoundRobin\PoolRouter;

$system = ActorSystem::create();
$props = PoolRouter::create(
    5,
    ActorSystem\Props::withProducer(fn() => $this->noneActor())
);
$router = $system->root()->spawn($props);

2つのタイプのルーター

Phluxorには、次の2つのタイプのルーカーがあります。

プール

プールは、インスタンスの数をパラメーターとしてルーターに提供し、
ルーターがルーティー(アクター)の作成を独自に行うタイプです。

グループ

グループは、プールとは異なり、
ルーターにルーティー(アクター)のリストを提供するタイプです。

意図的にルーティーを作成する必要がある場合は、
ルーティーとして使用するアクターを作成し、
アクターリファレンスであるRefをグループルーターに渡します。

Supervision

ルーターはアクターとして実装されるため、
通常のアクターと同様にルーターは親によって監視され子も監視できます。

グループルーターは別の場所で任意で作成されたルート先を使用します。
ルート先は子アクターとはならないため、
ルート先が停止した場合はグループルーターが子アクターを認識しなくなります。

一方でプールルーターは内部で独自の子アクターを作成します。
そのためこれまでの階層構造と同様にルーターはルート先のスーパーバイザーとなります。