博主信息
博文 81
粉丝 1
评论 0
访问量 146977
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
linux rabbitmq消息队列使用案例。
有什么是忘不了的的博客
原创
1272人浏览过

rabbitmq需要先按账好。请看我之前的rabbitmq安装的文章>>

使用前需要先安装 php-amqplib。

composer require php-amqplib/php-amqplib

这个命令会下载一个vendor文件夹 。

57]UN)JUYCY{L{QI{36(62Q.png

使用 向队列里写入数据:

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

}

效果图:

从队列里读取数据:

(HG}P4OKG8]$YU558U{%6F4.png

这里的读取里可以使用tp的自定义指令,在使用守护进程的方式运行。

tp自定义指令手册上有教程>>

    V5.1.24+版本开始,你可以通过命令行指令快速生成一条指令,包括指令类文件,例如:

    php think make:command First first

守护进程的方式

nohup php rabbitout.php &



本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学