rabbitmq需要先按账好。请看我之前的rabbitmq安装的文章>>
使用前需要先安装 php-amqplib。
composer require php-amqplib/php-amqplib
这个命令会下载一个vendor文件夹 。
使用 向队列里写入数据:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; //链接 这里的用户:liu是自己创建的,密码也是自己生成的。默认的用户只能本地链接, $connection = new AMQPStreamConnection('lcoalhost',5672,'liu','123456'); $channel = $connection->channel(); //这个shop是队列的名字,自己定义的 $queue_name = 'shop'; $channel->queue_declare($queue_name,false,false,false,false); //这里是需要向队列里写入的数据。 $msg = new AMQPMessage(json_encode(['mobile'=>'12345678909','goods_id'=>1])); $channel->basic_publish($msg,'',$queue_name); $channel->close(); $connection->close();
从队列里读取数据:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; //链接对列 $connection = new AMQPStreamConnection('localhost',5672,'liu','123456'); $channel = $connection->channel(); //队列的名字 $queue_name = 'shop'; $channel->queue_declare($queue_name,false,false,false,false); //这里是从队列里读取数据 $callback = function($msg){ echo $msg->body."\n"; }; $channel->basic_consume($queue_name,'',false,true,false,false,$callback); while($channel->is_consuming()){ $channel->wait(); } $channel->close(); $connection->close();
如果在:tp中使用直接 你直接在 tp根目录composer require php-amqplib/php-amqplib,也无需引入自动加载类tp会自动引入。
如下:
<?php namespace app\index\controller; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; class Index { public function index() { $connection = new AMQPStreamConnection('localhost',5672,'liu','123456'); $channel = $connection->channel(); $queue_name = 'shop'; $channel->queue_declare($queue_name,false,false,false,false); $msg = new AMQPMessage(json_encode(['mobile'=>'12345678909','goods_id'=>1])); $channel->basic_publish($msg,'',$queue_name); $channel->close(); $connection->close(); } }
效果图:
从队列里读取数据:
这里的读取里可以使用tp的自定义指令,在使用守护进程的方式运行。
tp自定义指令手册上有教程>>
V5.1.24+版本开始,你可以通过命令行指令快速生成一条指令,包括指令类文件,例如:
php think make:command First first
守护进程的方式
nohup php rabbitout.php &