PHPはラbritmq及びamqp拡張を使用して取り付けます(一)

21323 ワード

rabbiitmqメッセージ中間件
phpはrabbiitmqを使いますが、他の人が集めている開発カバンを使いたくないなら、自分で磨きます.
  • まず、統合開発パッケージを使用すると、PHPの拡張にはbcmathという数学的関連の拡張が必要です.composerを利用して開発パッケージをインストールします.
  • {
        "require": {
            "php-amqplib/php-amqplib": ">=2.6.1"
        }
    }
    
    composer.phar installを実行すればいいです.
  • PHPの拡張amqpを使用して、簡単に
  • をインストールします.
    2.1 http://pecl.php.net/package/amqpここでは、各バージョンのインストールパッケージが見られます.ダウンロード選択amqp-1.9.4.tgzをクリックしてダウンロードしてください.
    2.2サーバにアップロードする
    2.3解凍tar -xf amqp-1.9.4.tgz2.4自己サーバ上のphpize php-configの位置を検索する
    2.5 amqp-1.94に入り、加圧後のファイル
    2.6コンパイル準備/usr/bin/phpize2.7 ./configure --with-php-config=/usr/bin/php-config2.8 make && make installは、一般的にこのステップで最も間違いやすいです.ここでエラーが与えられたヒントはrabbitmq-cのこの依存性に欠けています.直接yumyum search rabbitmqを検索します.ネット上では多くのコンパイルがインストールされています.必要ではないです.yumがインストールできないなら、コンパイルしてインストールします.検索したものは4つあります.自分のサーバーに合うものを見つけました.普通はrabbitmq-devlのバージョンです.
    2.9再度[2.6–2.8]の操作は、最終的にコンパイルが成功しているのを見ることができます.二つのものに注意が必要です.一つはコンパイルが完了した後、私たちの拡張保存位置/usr/lib64/php/modulesです.この位置にあるはずです.二つ目はmake testコマンドを実行させてください.
    3.0この時に問題がなければ、私達はこの時にextension=amqp.soを追加します.
    3.1配置ファイルの位置を検索します.普通は/etc/php.dの中にあります.touch amqp.iniを作成してextension=amqp.soを追加します.
    3.2 PHP-FPMを再起動し、inx service php-fpm restart | service nginx restart3.3 PHPの拡張機能を確認するphp -m3.4プロファイルを表示するphp -ini | grep amqp
  • ニュース生産者
  • 
    
    //     
    define('EXEHANGE_NAME','RMQ_EN');
    
    //    
    define('ROUTE_KEY_NAME','RMQ_RKN');
    
    //    
    define('QUEUE_NAME','RMQ_QN');
    
    try {
        $arr = [
            'host'     => '127.0.0.1',
            'port'     => 5672,
            'user'     => 'guest',
            'password' => 'guest',
            'vhost'    => '/',
        ];
        //    
        $con = new AMQPConnection($arr);
        if(!$con->connect()) {
            var_dump('    1');
        }
        //     --        --                 
        $channel = new AMQPChannel($con);
    
        //     --       --               
        $exchange = new AMQPExchange($channel);
    
        //      
        $exchange->setName(EXEHANGE_NAME);
    
        $exchange->setType(AMQP_EX_TYPE_DIRECT);
    
        //        :        ,   :  
    
        for ($i = 0; $i < 20; $i++) {
            $message = date('Y-m-d H:i:s',time()).'--'.mt_rand(100,1000)*$i.'---  '.$i;
            $exchange->publish($message,ROUTE_KEY_NAME);
        }
    } catch (Exception $e) {
        var_dump('    ');
    }
    
    
    ?>
    
  • ニュース消費者
  • 
    //     
    define('EXEHANGE_NAME','RMQ_EN');
    
    //    
    define('ROUTE_KEY_NAME','RMQ_RKN');
    
    //    
    define('QUEUE_NAME','RMQ_QN');
    
    try {
        $arr = [
            'host'     => '127.0.0.1',
            'port'     => 5672,
            'user'     => 'guest',
            'password' => 'guest',
            'vhost'    => '/',
        ];
        //       AMQPConnection
        $con = new AMQPConnection($arr);
        if(!$con->connect()) {
            var_dump('    1');
        }
    
        //     --        --                 
        $channel = new AMQPChannel($con);
    
    //     --       --               
        $exchange = new AMQPExchange($channel);
    
    //      
        $exchange->setName(EXEHANGE_NAME);//      
    
    //      --   [  ,  ,  ]
        $exchange->setType(AMQP_EX_TYPE_DIRECT);
    
    //     
        $exchange->setFlags(AMQP_DURABLE);
    
    //  
        $exchange->declareExchange();
    
    //    ,        
        $queue = new AMQPQueue($channel);
    
    //      
        $queue->setName(QUEUE_NAME);
    
    //     
        $queue->setFlags(AMQP_DURABLE);
    
    //  
        $queue->declareQueue();
    
    //          :         :  
        $queue->bind(EXEHANGE_NAME,ROUTE_KEY_NAME);
    
    //  ,     ,        
        $queue->consume(function($event,$queue){
            $body = $event->getBody();
            var_dump($body);
    
            $queue->ack($event->getDeliveryTag());
        });
    
    } catch (Exception $e) {
        var_dump('    2');
    }
    ?>
    
  • サーバーでいくつかの端末を開けて、複数の消費者を実行して、生産者を実行します.私たち消費者の間で消費されているニュースが見られます.これは設定されているパラメータが違っています.