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 中添加

VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::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 App\Jobs;

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

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 "\n";
echo 'title =='. $this->title;
Log::info('id ===>'. $this->id. 'title ====>' . $this->title);
}
}

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

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

namespace App\Http\Controllers\Home;

use App\Jobs\Queue;

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

最新文章

  1. Step by step 如何创建一个新森林
  2. c#连接vertica数据库
  3. htop基本使用
  4. 51Nod 1079 中国剩余定理 Label:数论
  5. POJ 2001:Shortest Prefixes
  6. 配置FileZilla Ftp服务器
  7. DRP PK 牛腩新闻发布系统
  8. java_TreeSet 定制排序实例
  9. windows远程桌面连接配置
  10. 实现textarea限制输入字数
  11. python----------装饰器应用练习
  12. Mac新手使用指南:brew安装的nginx常用命令
  13. JAVA 将图片转换为Base64编码
  14. java序列化反序列化深入探究(转)
  15. VMware Workstation下安装Linux
  16. WinForm窗体权限控制的简单实现
  17. 实验九 FBG 团队项目需求改进与系统设计
  18. 写给笨蛋徒弟的学习手册(3)—C#中15个预定义数据类型
  19. mac gulp: command not found
  20. Appium 如何模拟按键

热门文章

  1. linux进阶之yum管理
  2. 进程-信号相关 函数-(转自wblyuyang)
  3. 使用Tomcat插件控制台中文乱码解决方案(IDEA)(Day_51)
  4. MySQL中InnoDB存储引擎的实现和运行原理
  5. 写Bug时,需要注意的几点3
  6. python mixin到底是什么
  7. Stopper的使用
  8. H.265视频编码与技术全析(上)
  9. CUDA运行时 Runtime(四)
  10. 实用的jar包加密方案