Laravel消息队列

Laravel消息队列##

本文所讲的消息队列是基于Beanstalkd的,一些繁重的任务可以放到消息队列里,后台异步处理。
看完并实践本系列文章,您便可以搭起来一个多层服务架构,比起直连DB,并发能力要提升许多

前端 <--> Redis Cache <--> 消息队列 <--> DB

一、设置##

1.修改配置文件里config/queue.php

设置default为`beanstalkd`,然后设置connections的beanstalkd,beanstalkd是安装在同一服务器,那么可使用默认的设置
  1. 修改环境变量 .env

    QUEUE_DRIVER设置为beanstalkd

    官方文档里没有说一步骤,使得任务一直以同步的方式运行,切记配置它

  2. 使用composer安装pda/pheanstalk ~3.0扩展,怎么安装前文已经有所介绍

二、安装beanstalkd##

sudo yum install beanstalkd

安装beanstalkd

sudo service beanstalkd start

启动

三、创建命令##

创建命令,由它执行任务(如数据库操作或图片处理等等)。

cd到你的工程目录下,运行如下命令,生成一个命令

php artisan make:command TestQueueToEchoMsg --queued

artisan会在你的Commands目录里生成TestQueueToEchoMsg类,里面包含handle方法,你的任务即在这里执行。

这里我只测试任务是否可以如期地被执行,于是只是简单地打个log即可,handle方法如下

public function handle()
    {
        Log::info('at '.time().' log by queue and the msg is:'.$this->msg);
    }

四、coding##

  • router.php添加如下代码

    Route::get('toQueue/{msg}', 'QueueController@triggerQueue');
    
  • QueueController里添加如下代码

    public function triggerQueue( $msg ){
        Log::info('ready to trigger2');
        
    
        $this->dispatch(new TestQueueToEchoMsg($msg)); //commond bus的方式运行,测试成功
    
        // $date = Carbon::now()->addSeconds(15);
        // // $date = Carbon::now()->addMinutes(15);
        // Queue::later($date, new TestQueueToEchoMsg($msg)); //延迟执行任务,测试成功
        
        // Queue::push( new TestQueueToEchoMsg($msg));  //立即执行任务,测试成功
        
        Log::info('triggered');
        echo "trgiered2";
    }
    
    

五、监听队列##

执行如下命令,监听队列,当有新的任务时,程序会监听到并执行它。

php artisan queue:listen

六、让队列跑起来!##

现在你可以在浏览器中输入http://host/toQueue/hello,然后打开storage/logs/今日的log文件,可以看到日志已经打上,并且是异步的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,719评论 0 121
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,688评论 19 139
  • 队列 简介 laravel 的队列服务对各种不同的后台队列服务提供了统一的 API。队列允许你延迟执行消耗时间的任...
    Dearmadman阅读 21,037评论 7 26
  • 必备品文档:DocumentationAPI: API Reference视频:Laracasts速查表:Lara...
    ethanzhang阅读 5,888评论 0 68
  • —— 写于2015/04/02 夏天,想你。 秋天,想你。 冬天,想你。 春天,把愁愁的念头,埋进泥土里。 后记 ...
    老默阅读 244评论 0 0

友情链接更多精彩内容