以前に発行されたアイデアの続きで、最初のバージョンよりも多くのOOPである実装を紹介します。
拡張コードはここにあります。プロジェクトとsvnの説明は古いバージョン(1.0)は英語に翻訳されています
バージョン2.0の簡単な説明:
クラスAMQPConnection-チャネル接続を含む論理接続を開きます。
コンストラクター:
APMQConection :: APMQConection([配列パラメーター])
パラメーター(すべてオプション):
- ホスト= [localhost]
- ポート= [5672]
- ログイン= [ゲスト]
- psw = [ゲスト]
- vhost = [/]
例外は、論理的または物理的な接続がないことです。
例:
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1', 'vhost'=>'v1' ) );
AMQPExchange Exchangeクラス
コンストラクター:
名前が指定されている場合は交換の作成、そうでない場合はクラスの初期化
AMQPExchange :: AMQPExchange(APMQConection cnn、ストリング[名前])
name-取引所の名前
例:
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$exchange = new AMQPExchange($cnn, 'ex_name');
Exchange広告:
proto bool AMQPEexchange :: declare([string name]、[string type = direct]、[bit params]);
name-取引所の名前
タイプ-交換タイプ、許可されるタイプ:直接、トピック、ファンアウト
params-パラメーター:
- AMQP_PASSIVE
- AMQP_DURABLE
- AMQP_AUTODELETE
- AMQP_INTERNAL
操作の結果を返します
例:
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$exchange = new AMQPExchange($cnn);
$exchange->declare('ex_name', 'topic',AMQP_DURABLE );
交換を削除:
proto bool AMQPExchange :: delete([string name]、[bit params]);
name-取引所の名前
params-パラメーター:
- AMQP_IFUNUSED
操作の結果を返します
例:
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$exchange = new AMQPExchange($cnn, 'ex_name');
$res = $exchange->delete();
// - , .
交換のキューイング:
proto bool AMQPExchange :: bind(string queueName、string routingKey);
queueName-キュー名
key-ルーティングキー、ルートキー、文字列
操作の結果を返します
例:
$msg = " , ...";
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$exchange = new AMQPExchange($cnn, 'ex_name');
$exchange->bind('mylogin','spb.news')
$res = $exchange->publish( $msg, 'spb.news');
出版物:
proto bool AMQPExchange :: publish(string msg、[string key]、bit [parms]);
交換トピックまたはダイレクトのタイプのキーキーを使用したメッセージの発行
msg-メッセージ、文字列
key-ルーティングキー、ルートキー、文字列
params-パラメーター:
- AMQP_MANDATORY
- AMQP_IMMEDIATE
操作の結果を返します
例:
$msg = " ...";
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$exchange = new AMQPExchange($cnn, 'ex_name');
$res = $exchange->publish( $msg, 'spb.news');
AMQPQueueキュークラス
コンストラクター-クラスの初期化
AMQPQueue :: AMQPQueue(AMQPConnection cnn、文字列[名前])
name-キュー名
キューアナウンスメント
proto int AMQPQueue :: declare(string [name]、bit [params])
name-キュー名
params-パラメーター:
- AMQP_AUTODELETE(デフォルト)
- AMQP_DURABLE
- AMQP_PASSIVE
- AMQP_EXCLUSIVE
キューが既に存在する場合、キュー内の要素の数を返します。
例:
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$queue = new AMQPQueue($cnn,'chat_12');
$queue->declare('chat_12', AMQP_AUTEDELETE | AMQP_DURABLE);
$cnn = new APMQConection(array ('port'=>5673, 'login' => 'sector1' ));
$queue = new AMQPQueue($cnn,'chat_12');
$queue->declare('chat_12', AMQP_AUTEDELETE | AMQP_DURABLE);
キューを削除
proto bool AMQPQueue ::削除(文字列[名前]、ビット[パラメーター])
name-キュー名
params-パラメーター:
- AMQP_IFUNUSED
- AMQP_IFEMPTY
操作の結果を返します
例:
$queue = new AMQPQueue(new APMQConection(),'chat_12');
$queue->delete();
$queue = new AMQPQueue(new APMQConection(),'chat_12');
$queue->delete();
キューを取引所にリンクする
:proto bool AMQPQueue :: bind(string exchangeName、string routingKey);
name-取引所の名前
routingkey-ルートキー
例:
// 'mylogin' 'ex_estate' '*.spb'
$queue = new AMQPQueue(APMQConection(), 'mylogin');
$queue->declare();
$queue->bind('ex_estate','*.spb');
購読する
プロトタイプ配列AMQPQueue :: consumer(int n);
キューからnメッセージの配列を取得します(他のすべては破棄されます)
n-受信したメッセージの数
params-パラメーター:
- AMQP_NOLOCAL
- AMQP_NOACK
- AMQP_EXCLUSIVE
注意!
受信したメッセージの数はキュー内のメッセージの総数を超えることはできません。そうしないと、APIはブローカーからのすべてのメッセージを受信するまで待機します。
現在キューにあるメッセージの数よりも少ないメッセージ数を指定すると、選択されていないすべてのメッセージが選択済みとしてマークされます。つまり、AMQP_NOACKフラグが設定されていない場合、キューから再読み取りするとメッセージは失われます。
例:
$i=0;
$queue = new AMQPQueue(APMQConection());
$n = $queue->declare('mylogin');
$queueMessages = $queue->consume( $n );
foreach($queueMessages as $item){
$i++;
echo "$i.$item";
}
$i=0;
$queue = new AMQPQueue(APMQConection());
$n = $queue->declare('mylogin');
$queueMessages = $queue->consume( $n );
foreach($queueMessages as $item){
$i++;
echo "$i.$item";
}
登録解除
proto bool AMQPQueue :: unbind(string exchangeName、string routingKey);
routingKeyルートキーのcheating exchangeNameから現在のキューをデタッチします
name-取引所の名前
routingkey-ルートキー
操作の結果を返します
キューのリセット
proto bool AMQPQueue ::パージ(文字列[名前])
キュー内のすべてのメッセージは破棄され、キュー自体は残ります。
name-キュー名
操作の結果を返します
例:
$queue = new AMQPQueue(new APMQConection());
$queue->purge('chat_12');
$queue = new AMQPQueue(new APMQConection());
$queue->purge('chat_12');
キュー項目を取得
プロトタイプ配列AMQPQueue :: get(string [name]、bit [params])
name-キュー名
params-パラメーター:
- AMQP_NOASK(デフォルト)
連想配列を返します。
- msg-現在のメッセージ
- count-キューに残っているメッセージの数、次の場合:
- count = 0-このメッセージはキューの最後です
- count = -1キューは空です。msgキーがありません
パフォーマンスを比較する場合、consume()メソッドはget()よりも高速です
ただし、getメソッドの方が信頼性が高くなります。