docker+Laravel5.7+rabbitmq 尝试

我的环境:Unbuntu、Docker version 18.06.1-ce、docker-compose version 1.18.0、git version 2.7.4

1、 克隆环境

git clone https://github.com/MichealJl/dnmp.git

2、进入dnmp目录将env-example重命名为.env

cd dnmp && mv env-example .env

3、修改env文件

docker+laravel5.7+rabbitmq尝试
设置完之后看一执行docker-compose config 查看你的配置

4、运行容器

docker-compose up -d

5、进入php容器

docker exec -it dnmp_php-fpm72_1 /bin/bash

6、安装git、composer、laravel

apt-get update && apt-get install git

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

php composer-setup.php

mv composer.phar /usr/bin/composer

composer config -g repo.packagist composer https://packagist.phpcomposer.com

composer create-project laravel/laravel --prefer-dist laravel "5.7.*"

7、composer安装laravel-queue-rabbitmq包

cd /www/laravel/ && composer require vladimir-yuldashev/laravel-queue-rabbitmq

这时候会报错缺少bcmath扩展

docker-php-ext-install bcmatch

之后重新安装laravel-queue-rabbitmq包

8、在config/app.conf的providers 中添加

VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class,

这时候你可以用xshell开两个窗口,一个是在php容器内执行命令,另一个负责在外面修改文件

9、在config/queue.conf中添加rabbitmq的配置

配置请参考https://github.com/vyuldashev/laravel-queu...

10、在laravel的.env中添加几个环境变量

RABBITMQ_HOST=rabbitmq #rabbitmq的服务器地址,这里可以填写docker-compose.yml中你定义的rabbitmq名称 

RABBITMQ_PORT=5672 #rabbitmq的端口 

RABBITMQ_VHOST=/

RABBITMQ_LOGIN=test #rabbitmq的登录名 

RABBITMQ_PASSWORD=123456 #rabbitmq的密码 

RABBITMQ_QUEUE=test_queue #rabbitmq的队列名称

修改QUEUE_CONNECTION为rabbitmq

11、创建任务类

php artisan make:job TestQueue

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

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

    protected $data;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        //
        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        $data = $this->data;
        echo json_encode($data);

    }
}

12、投放数据倒队列

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Jobs\TestQueue;

class TestController extends Controller
{
    //
    public function store(Request $request)
    {
        $data['title'] = $request->get('title','this is test queue');
        $data['time']  = date('Y-m-d H:i:s');
        $job           = (new TestQueue($data))->onQueue('testqueue');
        $this->dispatch($job);
    }
}

添加路由

docker+laravel5.7+rabbitmq尝试

13、修改nginx配置文件指向项目目录,重启nginx容器

vim nginx/conf.d/default.conf

docker restart dnmp_nginx_1

docker restart dnmp_php-fpm72_1

14、消费队列

php artisan queue:work --queue=testqueue --daemon

访问接口会有如下结果

docker+laravel5.7+rabbitmq尝试

15、登录rabbitmq

访问你的ip 的15672端口出现如下界面

docker+laravel5.7+rabbitmq尝试

docker+laravel5.7+rabbitmq尝试

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!