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