ホームページ > バックエンド開発 > PHPチュートリアル > PHP AMQP 拡張アプリケーション

PHP AMQP 拡張アプリケーション

WBOY
リリース: 2016-06-13 13:25:48
オリジナル
883 人が閲覧しました

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();

?>
ログイン後にコピー


Receiver Consumer

<?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();

?>
ログイン後にコピー


メッセージ キューについて初めて学習します。
Linux のメッセージ キューと AMQP の長所と短所がわかりません
PHP の sysvmsg 関数を使用して while ループを実行します。これをサーバー上でハングさせて、メッセージ キューのメッセージをリアルタイムで監視できます. メッセージがあれば取​​得するのでメモリは増えません

amqp whileループ監視ではメッセージがなくてもメモリがどんどん増えていきます。 PHP に対してメモリ不足が発生し、エラーが報告されます。

この面でのコミュニケーションと学習が増えているようです
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート