コンシューマー: メッセージを受信
ロジック:
接続の作成 --> ;チャネルの作成 --> スイッチの作成 --> キューの作成 --> スイッチ/キュー/ルーティング キーのバインド --> メッセージの受信
<?php /************************************** PHP amqp(RabbitMQ) Demo - consumer* Author: Linvo* Date: 2012/7/30*************************************///配置信息$conn_args = array( 'host' => '192.168.1.93', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/');$e_name = 'e_linvo'; //交換機(jī)名$q_name = 'q_linvo'; //隊(duì)列名$k_route = 'key_1'; //路由key//創(chuàng)建連接和channel$conn = new AMQPConnection($conn_args);if (!$conn->connect()) { die("Cannot connect to the broker!\n");}$channel = new AMQPChannel($conn);//創(chuàng)建交換機(jī)$ex = new AMQPExchange($channel);$ex->setName($e_name);$ex->setType(AMQP_EX_TYPE_DIRECT); //direct類型$ex->setFlags(AMQP_DURABLE); //持久化echo "Exchange Status:".$ex->declare()."\n";//創(chuàng)建隊(duì)列$q = new AMQPQueue($channel);$q->setName($q_name);$q->setFlags(AMQP_DURABLE); //持久化echo "Message Total:".$q->declare()."\n";//綁定交換機(jī)與隊(duì)列,并指定路由鍵echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n";//阻塞模式接收消息echo "Message:\n";while(True){ $q->consume('processMessage'); //$q->consume('processMessage', AMQP_AUTOACK); //自動(dòng)ACK應(yīng)答}$conn->disconnect();/*** 消費(fèi)回調(diào)函數(shù)* 處理消息*/function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //處理消息 $queue->ack($envelope->getDeliveryTag()); //手動(dòng)發(fā)送ACK應(yīng)答}
プロデューサー: メッセージの送信
ロジック:
接続の作成 --> チャネルの作成 --> スイッチ オブジェクトの作成 --> メッセージの送信
<?php /************************************** PHP amqp(RabbitMQ) Demo - publisher* Author: Linvo* Date: 2012/7/30*************************************///配置信息$conn_args = array( 'host' => '192.168.1.93', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/');$e_name = 'e_linvo'; //交換機(jī)名//$q_name = 'q_linvo'; //無需隊(duì)列名$k_route = 'key_1'; //路由key//創(chuàng)建連接和channel$conn = new AMQPConnection($conn_args);if (!$conn->connect()) { die("Cannot connect to the broker!\n");}$channel = new AMQPChannel($conn);//消息內(nèi)容$message = "TEST MESSAGE! 測試消息!";//創(chuàng)建交換機(jī)對(duì)象$ex = new AMQPExchange($channel);$ex->setName($e_name);//發(fā)送消息//$channel->startTransaction(); //開始事務(wù)for($i=0; $ipublish($message, $k_route)."\n";}//$channel->commitTransaction(); //提交事務(wù)$conn->disconnect();
注意事項(xiàng):
キュー オブジェクトには、メッセージを取得するために使用できる 2 つのメソッド (consume と get) があります。
前者はブロッキングであり、メッセージがない場合は一時(shí)停止されるため、ループでの使用に適しています。
後者は非ブロッキングであり、メッセージがある場合に取得されます。メッセージがない場合は false が返されます。
テスト スクリーンショット
コンシューマーを?qū)g行します:
プロデューサーを?qū)g行してメッセージを送信します:
コンシューマは次のメッセージを受け取ります:
?
http:// nonfu .me/p/9722.html