【UNITパラメータクラスの実装】

はじめに

キューとUNITが常駐型処理状態のステータス管理を担っているのに対して、このクラスはデータドリブンによるステータス管理の役割を担い、専用のコマンドを使ってスキャフォールディングできます。 SocketManagerクラスを使う場合に比べて通信データの処理は必要なくなりますので、UNITを跨ったより簡易的なグローバルコンテキストを制御します。

※キューとUNITの詳細については▶イベントハンドラについてを参照。

基底クラスのまま利用する場合は特に新たなクラスを生成する必要はありませんが、例えばサービス管理ランチャーのサービスリストを管理したり、SocketManagerクラスを使った通信サービスとの連携で必要になる独自仕様の拡張を行いたいような場合に以下のコマンドを使って生成します。
> php worker runtime:parameter ParameterForTest

[success] UNITパラメータクラスの生成に成功しました (ParameterForTest)
                    

コマンドを実行する事でapp/UnitParameterの場所にParameterForTestというクラス名でRuntimeManagerParameterクラスを継承したUNITパラメータクラスが生成されます。

このクラスでは、それぞれのステータスUNITの中でRuntimeManagerとのデータやフロー制御の橋渡し役も担いますので、以降ではその代表的なメソッドをご紹介しています。


キューとUNITの操作

ここでは実行中のキューとUNITを操作するメソッドをご紹介します。


➤キュー名の取得

現在実行中のキュー名を取得する時に使います。
【メソッド】getQueueName(): ?string

【パラメータ】なし

【戻り値】string|null
    - string: 現在実行中のキュー名
    - null: なし
                    


➤キュー名の設定

現在実行中、あるいは停止しているキューを設定する時に使います。
【メソッド】setQueueName(?string $p_name)

【パラメータ】
    $p_name - string|null - 必須 - 設定するキュー名

【戻り値】なし
                    

➤ステータス名の取得

現在実行中のステータス名を取得する時に使います。
ポーリングUNITなど、自身のステータス名を記述する代わりに自動で返す場合などに役立ちます。
【メソッド】getStatusName(): ?string

【パラメータ】なし

【戻り値】string|null
    - string: 現在実行中のステータス名
    - null: なし
                    

➤ステータス名の設定

自身のRuntimeManager上ではステータスUNITの戻り値で制御できますが、このメソッドは外部から設定する時に役立ちます。
【メソッド】setStatusName(?string $p_name)

【パラメータ】
    $p_name - string|null - 必須 - 設定するステータス名

【戻り値】なし
                    

中断や緊急停止系

それぞれ例外を発行するタイプですが目的に応じて以下のように挙動が異なります。

➤UNIT処理を中断する

現在のUNITが処理中であってもステータスを維持したまま処理を中断します。
【メソッド】throwBreak()

【パラメータ】なし

【戻り値】なし
                    


➤アプリ終了

例外を発行してアプリを正常終了させます。
【メソッド】finishShutdown()

【パラメータ】なし

【戻り値】なし
                    


➤緊急(即時)停止

例外を発行してアプリを緊急停止させ、初期化クラスで登録した緊急停止コールバックを呼び出します。
【メソッド】emergencyShutdown()

【パラメータ】なし

【戻り値】なし
                    

おわりに

UNITパラメータクラスはデベロッパーによってインスタンス化され、初期化クラスのgetUnitParameterメソッドの戻り値に設定される事で利用可能になり、各UNIT引数を通して渡されます。
つまりフレームワーク内でインスタンス化する事はないので、動的にメモリを圧迫するような心配はなくなります。

通信処理を必要とするSocketManagerParameterクラスの詳細については▶UNITパラメータクラスをご覧ください。