• php laravel5.5使用rabbitmq消息队列


    1.安装rabbitmq

    2.安装amqp扩展

    3.在Laravel中配置 Rabbitmq

    我是Laravel5.5,按照文档上说我只能用6版本

    composer require vladimir-yuldashev/laravel-queue-rabbitmq=6.0

    这个包依赖illuminate/queue,在composer.json中的require对象,添加

    "illuminate/queue": "^5.5"

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

    VladimirYuldashevLaravelQueueRabbitMQLaravelQueueRabbitMQServiceProvider::class,

    执行 composer install/composer update

    config/queue.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
    QUEUE_CONNECTION=rabbitmq # 走rabbitmq
    RABBITMQ_HOST=127.0.0.1 # IP/如果是用docker安装的rabbitmq,则写容器名称rabbit(我的容器是 rabbit )
    RABBITMQ_PORT=5672  #端口
    RABBITMQ_VHOST=/
    RABBITMQ_LOGIN=guest # 账号
    RABBITMQ_PASSWORD=guest # 密码
    RABBITMQ_QUEUE=test_queue # 队列名称。如果你没有它会默认创建 Exchanges和Queue

    #ssl连接配置(如果开启,把前面#取消)
    #RABBITMQ_SSL=true
    #RABBITMQ_SSL_CAFILE=/path_to_your_ca_file
    #RABBITMQ_SSL_LOCALCERT=
    #RABBITMQ_SSL_PASSPHRASE=
    #RABBITMQ_SSL_KEY=

    4.创建任务 QueueJob

    php artisan make:job Queue

    执行之后会生成一个文件 app/Jobs/Queue.php(执行队列的逻辑文件-消费者)

    <?php

    namespace AppJobs;

    use IlluminateBusQueueable;
    use IlluminateQueueSerializesModels;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    use IlluminateSupportFacadesLog;

    class Queue implements ShouldQueue
    {
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private $id;
    private $title;

    /**
    * Create a new job instance.
    *
    * @return void
    */
    public function __construct($id, $title)
    {
    //
    $this->id = $id;
    $this->title = $title;

    }

    /**
    * Execute the job.
    *
    * @return void
    */
    public function handle()
    {
    //
    echo 'id =='. $this->id;
    echo " ";
    echo 'title =='. $this->title;
    Log::info('id ===>'. $this->id. 'title ====>' . $this->title);
    }
    }

    生产者-把数据放进 mq 队列(创建一个index控制器文件)

    <?php
    /**
    * Created by Kris.
    */

    namespace AppHttpControllersHome;

    use AppJobsQueue;

    class IndexController extends BaseController
    {

    public function index()
    {
    echo '这是rabbitmq的消费队列';
    $arr = [
    ['id' => 4, 'title' => '张三'],
    ['id' => 5, 'title' => '李四'],
    ['id' => 6, 'title' => '王五'],
    ];

    foreach ($arr as $v) {
    $queue = new Queue($v['id'], $v['title']);
    $this->dispatch($queue);
    }
    echo '<br>';
    echo 'ok';
    }
    }

    在shell终端开启一个进程,消费队列

    php artisan queue:work rabbitmq --queue=test_queue --tries=3

    执行成功结果:

     也可以在web端查看(访问服务器IP:端口,例如http://127.0.0.1:15672/)

     

    注:记得开启服务器安全组端口:15672和5672

  • 相关阅读:
    [ Pytorch ] torch.squeeze() 和torch.unsqueeze()的用法
    莫烦
    毕业设计 Makefile 编写
    Manjaro搭建无密访问samba服务器
    GEC6818交叉开发环境搭建拟稿
    彻底删除windows残留启动引导
    Cmd Markdown 编辑阅读器
    Hi3519v101 SDK安装及升级
    Linux 修改SWAP分区后导致开机问题
    Linux 安装搭建 tftpd 服务器
  • 原文地址:https://www.cnblogs.com/myJuly/p/14857728.html
Copyright © 2020-2023  润新知