文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP+Laravel框架RabbitMQ简单使用

2023-09-08 08:49

关注

RabbitMQ安装教程请转到:RabbitMQ安装教程(超详细)

1、创建生产者

在app/Http/Controllers里创建一个php控制器文件,

namespace App\Http\Controllers;use App\Http\Controllers\Controller;//引入amqp扩展use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;use PhpAmqpLib\Wire\AMQPTable;require_once(__DIR__.'/../../../../vendor/autoload.php');class TestController extends Controller {        public function production() {        //创建服务器连接        $connection = new AMQPStreamConnection('172.16.5.114', 5672, 'admin', '123456');        //连接信道        //信道是生产消费者与rabbit通信的渠道,生产者publish或者消费者消费一个队列都是需要通过信道来通信的        //信道是建立在TCP上面的虚拟链接,也就是rabbitMQ在一个TCP上面建立成百上千的信道来达到多个线程处理。        //注意是一个TCP 被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID,保证了信道的私有性,对应上唯一的线程使用。        $channel = $connection->channel();        //channel->queue_declare通过信道创建一个是否是持久化的消息队列        //queue第一个参数代表消息队列名称        $channel->queue_declare('test_queue', false, false, false, false);        //往队列里要发送内容,待发送的内容        $data = '这是一个生产者消息' . date('Y-m-d H:i:s');        $msg = new AMQPMessage($data);        //通过信道来进行发送消息        //而exchange是怎么知道消息应该推到哪个queue呢,这就要通过绑定queue与exchange时的routingkey了,通过代码进行绑定并且指定routingkey,下面有一张关系图,p(发布者) —> x(exchange) bindding(绑定关系也就是我们的routingkey) 红色代表着queue        $channel->basic_publish($msg, '', 'test_queue');        echo " [x] Sent '这是一个生产者消息!'\n";        //关闭信道        $channel->close();        //关闭连接        $connection->close();    }}

在routes/web.php中加一下路由

use App\Http\Controllers\TestController;Route::get('/test/production', [TestController::class, 'production']);

运行下就可以生成队列了

 2、创建消费者

在app/Console/Commands下创建一个php文件,比如TestQueue.php

channel();        //channel->queue_declare通过信道创建一个是否是持久化的消息队列        //queue第一个参数代表消息队列名称        $channel->queue_declare('test_queue', false, false, false, false);        echo " [*] Waiting for messages. To exit press CTRL+C\n";        //进行监听消费者是否有消息,如果有进行输出消息内容        $callback = function ($msg) {            echo ' [x] Received ', $msg->body, "\n";        };        //通过信道进行消费消息        $channel->basic_consume('test_queue', '', false, true, false, false, $callback);        //如果信道是打开状态        while ($channel->is_open()) {            //然后让信道一直处于监听等待状态            $channel->wait();        }        //关闭信道        $channel->close();        //关闭连接        $connection->close();    }}

修改app/Console/Kernel.php文件,即$commands增加TestQueue::class

command('inspire')        //          ->hourly();    }        protected function commands()    {        $this->load(__DIR__.'/Commands');        require base_path('routes/console.php');    }}

3、使用command进行测试

先cd到项目根目录,执行下面命令

php artisan rabbitmq_TestQueue

就消费了消息

 按 Ctrl+c 结束

生产环境可以使用守护进程

 

 

 

 

来源地址:https://blog.csdn.net/weixin_44545251/article/details/128223092

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯