ホームページ >バックエンド開発 >PHPチュートリアル >PHP AMQP 拡張アプリケーション
PHP AMQP 拡張アプリケーション
週末に休みを取って、AMQP の PHP 拡張機能を勉強するのに 1 日かかりました。
Advanced Message Queuing Protocol (AMQP) は、次の目的で使用されるアプリケーション層プロトコルの仕様です。非同期メッセージング。 AMQP クライアントは、API (JMS など) ではなくワイヤー層プロトコルとして、ソースに関係なくメッセージを任意に送受信できます。現在、さまざまなプラットフォーム上で使用できるサーバーとクライアントがかなりの数あります。
私の AMQP サーバーは RabbitMQ を使用しており、オンラインには RabbitMQ が多数インストールされています。
PHP 拡張機能 php-amqp に注目してください。私は最新の amqp-1.0.1 を使用しています。
ドキュメントは古くて新しいため、完了するまでに時間がかかりました。
まずプロセスについて説明します: クライアント - AMQP サーバー - クライアント
左側のクライアントが右側のクライアントにメッセージを送信します。プロセス:
1、接続の取得
2、チャネルの取得
3、Exchange の定義、キュー
4、RoutingKey を使用してキューを Exchange にバインド
5、 Exchange と RoutingKey を指定することで、対応するキュー
6 にメッセージを送信するために、受信側も受信時に接続を取得し、チャネルを取得して、キューからメッセージを直接フェッチするキューを指定します。 Exchange や RoutingKey に役立つキューです。バインディングの程度は関係ありません。対応するキューに移動してメッセージを取得するだけです。
以下は PHP の実装です。
プロダクション メッセージ:
<?php //设置你的连接 $conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest'); $conn = new AMQPConnection($conn_args); if ($conn->connect()) { echo "Established a connection to the broker \n"; } else { echo "Cannot connect to the broker \n "; } //你的消息 $message = json_encode(array('Hello World!','php','c++')); //创建channel $channel = new AMQPChannel($conn); //创建exchange $ex = new AMQPExchange($channel); $ex->setName('exchange');//创建名字 $ex->setType(AMQP_EX_TYPE_DIRECT); $ex->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); echo "exchange status:".$ex->declare(); echo "\n"; //创建队列 $q = new AMQPQueue($channel); //设置队列名字 如果不存在则添加 $q->setName('queue'); $q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); echo "queue status: ".$q->declare(); echo "\n"; echo 'queue bind: '.$q->bind('exchange','route.key');//将你的队列绑定到routingKey echo "\n"; $channel->startTransaction(); echo "send: ".$ex->publish($message, 'route.key'); //将你的消息通过制定routingKey发送 $channel->commitTransaction(); $conn->disconnect(); ?>
<?php $conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest' ,'vhost'=>'/'); $conn = new AMQPConnection($conn_args); $conn->connect(); $channel = new AMQPChannel($conn); $q = new AMQPQueue($channel); $q->setName('queue2'); $q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); echo "queue status: ".$q->declare(); echo "==========\n"; $messages = $q->get(AMQP_AUTOACK); print_r($messages->getBody()); echo "\n"; // disconnect $conn->disconnect(); ?>