php队列 —— rabbitmq

Reading time ~1 minute

lumen中使用rabbitmq

1,安装rabbitMQ驱动库

有很多开源好用的库可以使用,本例子使用 vladimir-yuldashev/laravel-queue-rabbitmq 在项目根目录运行命令:

composer require vladimir-yuldashev/laravel-queue-rabbitmq:5.3
2,注册rabbitMQ服务

在文件 bootstrap/app.php中添加一行:

$app->register(VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class);
3,配置

修改config/queque.php文件,在Connections中添加:

'rabbitmq' => [
    'driver' => 'rabbitmq',

    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
    'port' => env('RABBITMQ_PORT', 5672),

    'vhost' => env('RABBITMQ_VHOST', '/'),
    'login' => env('RABBITMQ_LOGIN', 'guest'),
    'password' => env('RABBITMQ_PASSWORD', 'guest'),

    'queue' => env('RABBITMQ_QUEUE'), // name of the default queue,
    'exchange_declare' => env('RABBITMQ_EXCHANGE_DECLARE', true), // create the exchange if not exists
    'queue_declare_bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true), // create the queue if not exists and bind to the exchange

    'queue_params' => [
        'passive' => env('RABBITMQ_QUEUE_PASSIVE', false),
        'durable' => env('RABBITMQ_QUEUE_DURABLE', true),
        'exclusive' => env('RABBITMQ_QUEUE_EXCLUSIVE', false),
        'auto_delete' => env('RABBITMQ_QUEUE_AUTODELETE', false),
    ],

    'exchange_params' => [
        'name' => env('RABBITMQ_EXCHANGE_NAME', null),
        'type' => env('RABBITMQ_EXCHANGE_TYPE', 'direct'), // more info at http://www.rabbitmq.com/tutorials/amqp-concepts.html
        'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false),
        'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true), // the exchange will survive server restarts
        'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
    ],

]

在.env文件中配置:

QUEUE_DRIVER=rabbitmq    
RABBITMQ_HOST=172.29.231.70
RABBITMQ_PORT=5672
RABBITMQ_LOGIN=guest
RABBITMQ_PASSWORD=guest
4,使用

创建queque 实例:Jobs目录生成对应文件

php artisan make:job TagJob  

内容如下:


    /**
     * Created by PhpStorm.
     * User: cfeng
     * Date: 2016/11/8
     * Time: 9:30
     */
    
    namespace App\Jobs;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Mockery\CountValidator\Exception;
    use App\Tag;
    
    class TagJob extends Job
    {
    
        private $tags;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($tags)
        {
            //消息队里内的数据
            $this->tags = $tags;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //处理消息队列数据
            
            //保存tag
            Tag::saveTag($this->tags);
    
        }
    }
    

将数据推送到消息队列中

    $tagJob= (new MetricJobV1($tags))->onQueue("TagJob");
    $this->dispatch($tagJob);

开启消费者监听队列

nohup php artisan queue:work --daemon --queue=TagJob > tagJob.log 2>1 &

具体使用可以参考laravel 文档: https://laravel.com/docs/5.5/queues

Spring学习笔记:AOP

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OO...… Continue reading

Spring学习笔记:注解

Published on December 19, 2017

linux(centos)系统安装lamp环境

Published on May 02, 2017