• RabbitMq使用说明


    前提条件:PHP拓展amqp协议和sockets要开启

    使用方式:参见 队列

    1、Composer 安装 laravel-queue-rabbitmq

    composer require vladimir-yuldashev/laravel-queue-rabbitmq:v7.1.2(因为我使用laravel版本是5.6)
    

    2、在 config/app.php 文件中,providers 中添加:

    VladimirYuldashevLaravelQueueRabbitMQLaravelQueueRabbitMQServiceProvider::class,
    

    3、在 app/config/queue.php 配置文件中的 connections 数组中加入以下配置

            'rabbitmq' => [
    
                'driver' => 'rabbitmq',
    
                'dsn' => env('RABBITMQ_DSN', null),
    
                /*
                 * Could be one a class that implements InteropAmqpAmqpConnectionFactory for example:
                 *  - EnqueueAmqpExtAmqpConnectionFactory if you install enqueue/amqp-ext
                 *  - EnqueueAmqpLibAmqpConnectionFactory if you install enqueue/amqp-lib
                 *  - EnqueueAmqpBunnyAmqpConnectionFactory if you install enqueue/amqp-bunny
                 */
    
                'factory_class' => EnqueueAmqpLibAmqpConnectionFactory::class,
    
                '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', 'default'),
    
                'options' => [
    
                    'exchange' => [
    
                        'name' => env('RABBITMQ_EXCHANGE_NAME'),
    
                        /*
                         * Determine if exchange should be created if it does not exist.
                         */
    
                        'declare' => env('RABBITMQ_EXCHANGE_DECLARE', true),
    
                        /*
                         * Read more about possible values at https://www.rabbitmq.com/tutorials/amqp-concepts.html
                         */
    
                        'type' => env('RABBITMQ_EXCHANGE_TYPE', InteropAmqpAmqpTopic::TYPE_DIRECT),
                        'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false),
                        'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true),
                        'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
                        'arguments' => env('RABBITMQ_EXCHANGE_ARGUMENTS'),
                    ],
    
                    'queue' => [
    
                        /*
                         * Determine if queue should be created if it does not exist.
                         */
    
                        'declare' => env('RABBITMQ_QUEUE_DECLARE', true),
    
                        /*
                         * Determine if queue should be binded to the exchange created.
                         */
    
                        'bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true),
    
                        /*
                         * Read more about possible values at https://www.rabbitmq.com/tutorials/amqp-concepts.html
                         */
    
                        '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),
                        'arguments' => env('RABBITMQ_QUEUE_ARGUMENTS'),
                    ],
                ],
    
                /*
                 * Determine the number of seconds to sleep if there's an error communicating with rabbitmq
                 * If set to false, it'll throw an exception rather than doing the sleep for X seconds.
                 */
    
                'sleep_on_error' => env('RABBITMQ_ERROR_SLEEP', 5),
    
                /*
                 * Optional SSL params if an SSL connection is used
                 * Using an SSL connection will also require to configure your RabbitMQ to enable SSL. More details can be founds here: https://www.rabbitmq.com/ssl.html
                 */
    
                'ssl_params' => [
                    'ssl_on' => env('RABBITMQ_SSL', false),
                    'cafile' => env('RABBITMQ_SSL_CAFILE', null),
                    'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
                    'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
                    'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
                    'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
                ],
    
            ],
    

    4、修改 .env 文件

    QUEUE_CONNECTION=rabbitmq    #这个配置env一般会有先找到修改为这个
    以下是新增配置
    
    RABBITMQ_HOST=rabbitmq  #mq的服务器地址,我这里用的是laradock,具体的就具体修改咯
    RABBITMQ_PORT=5672  #mq的端口
    RABBITMQ_VHOST=/
    RABBITMQ_LOGIN=guest    #mq的登录名
    RABBITMQ_PASSWORD=guest   #mq的密码
    RABBITMQ_QUEUE=queue_name   #mq的队列名称
    

    5、创建任务类

    php artisan make:job Queue

    执行之后会生成一个文件 app/Jobs/Queue.php

    例子:

    <?php
    
    namespace AppJobs;
    
    use IlluminateBusQueueable;
    use IlluminateFoundationBusDispatchable;
    use IlluminateQueueSerializesModels;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateContractsQueueShouldQueue;
    
    class Queue  implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        private $data;
    
        /**
         * Queue constructor.
         * @param $data
         */
        public function __construct($data)
        {
            $this->data = $data;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            print_r($this->data);
        }
    }
    

    6、生产,把数据放进 mq 队列

    <?php
    
    namespace AppHttpControllers;
    
    use AppJobsQueue;
    
    class IndexController extends Controller
    {
    
        public function index()
        {
            $this->dispatch(new Queue(['code' => 200, 'message' => '发布消息']));
            return "发送成功";
        }
    
    }
    

    7、消费队列

    执行命令进行消费:

    php artisan queue:work rabbitmq

  • 相关阅读:
    xxx
    部署在自己的加了分享,试下
    疑问
    去掉分享
    womenzijide_jiafenxiang
    womenzijide2
    womenzijide
    xiugai-去除js注释
    xiugai2
    《设计模式之禅》读书笔记(一)——单例模式
  • 原文地址:https://www.cnblogs.com/mxyindex/p/11051146.html
Copyright © 2020-2023  润新知