以前に発行されたアイデアの続きで、最初のバージョンよりも多くの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メソッドの方が信頼性が高くなります。