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-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);
}
}
添加路由
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
访问接口会有如下结果
15、登录rabbitmq
访问你的ip 的15672端口出现如下界面
本作品采用《CC 协议》,转载必须注明作者和本文链接