#安装
apt install rabbitmq-server
#添加用户
rabbitmqctl add_user username password
#设置刚刚添加的用户为管理员(只有管理员才能远程登录
rabbitmqctl set_user_tags username administrator
#同时为用户设置读写等权限
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
#安装RabbitMQ监控管理插件进行RabbitMQ的管理(可视化)
rabbitmq-plugins enable rabbitmq_management
#直接访问http://localhost:15672就可以看到页面了
#先要确保PHP安装了sockets和amqp扩展
#安装amqp扩展
apt-get -y install librabbitmq-dev
#安装vladimir-yuldashev/laravel-queue-rabbitmq,要选好版本。composer里面有对应版本的图片,
composer require vladimir-yuldashev/laravel-queue-rabbitmq v11.3.0
'connections' => [
'rabbitmq' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
'hosts' => [
[
'host' => env('RABBITMQ_HOST', '127.0.0.1'),
'port' => env('RABBITMQ_PORT', 5672),
'user' => env('RABBITMQ_USER', 'guest'),
'password' => env('RABBITMQ_PASSWORD', 'guest'),
'vhost' => env('RABBITMQ_VHOST', '/'),
],
],
'options' => [
'ssl_options' => [
'cafile' => env('RABBITMQ_SSL_CAFILE', null),
'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
],
'queue' => [
'job' => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class,
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
],
#RABBITMQ_WORKER这个可要可不要,如果你是安装了horizon扩展的话,这里可以直接设置成horizon,这样就可以直接通过laravel的这个可视化来查看队列的执行情况了。如果没有装,那就只能用rabbitmq的那个可视化
#新增以下内容
RABBITMQ_WORKER=horizon
RABBITMQ_HOST=自己的IP或者域名
RABBITMQ_PORT=5672
RABBITMQ_LOGIN=连接rabbitmq的用户名,默认guest
RABBITMQ_PASSWORD=连接rabbitmq的密码,默认guest
RABBITMQ_QUEUE=队列名字
#修改以下内容
QUEUE_CONNECTION=rabbitmq
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class TestMqJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
sleep(2);
Log::info(1);
}
}
创建个路由(routes/web.php),循环加入队列就行
Route::get('/test', function () {
for($i=0;$i<10;$i++){
dispatch(new App\Jobs\TestMqJob());
}
});
运行队列处理器
php artisan queue:work rabbitmq --queue=default
#执行上面的命令后就可以在rabbitmq的可视化界面的connections下看到有客户端连接上去了。然后再发我test路由,就可以看到每隔2秒有数据写入到log中了
#卸载之前安装的
apt remove rabbitmq-server
#删除指定目录,不然后面安装了其他版本也无法打开服务。路径需要按照自己的来
rm -rf /etc/rabbitmq
rm -rf /var/log/rabbitmq
rm -rf /var/lib/rabbitmq
## 安装erlang
#添加Key
wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add -
#加入源(看自己系统版本)
#ubuntu 20
echo "deb https://packages.erlang-solutions.com/ubuntu focal contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list
#ubuntu 18
echo "deb https://packages.erlang-solutions.com/ubuntu bionic contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list
#ubuntu 16
echo "deb https://packages.erlang-solutions.com/ubuntu xenial contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list
#更新源
sudo apt update
#查看erlang有哪些版本
apt-cache madison esl-erlang
#安装erlang。先看下erlang和rabbitmq版本对比在确定装哪个。https://www.rabbitmq.com/which-erlang.html
sudo apt-get install esl-erlang=1:24.3.2-1
##安装rabbitmq-server
#环境准备
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
#查看版本
apt-cache madison rabbitmq-server
#安装指定版本
sudo apt-get install rabbitmq-server=3.10.1-1
#如果可视化使用的是laravel官方的horizon,也就是.env文件中设置为,QUEUE_CONNECTION=rabbitmq,RABBITMQ_WORKER=horizon,这个时候延迟队列会失效。必须使用rabbitmq默认的可视化工具才行,也就是RABBITMQ_WORKER=default,QUEUE_CONNECTION=rabbitmq或者RABBITMQ_WORKER=horizon,QUEUE_CONNECTION=redis
#也就是说想要延迟队列有效果,那就要配置成
RABBITMQ_WORKER=default
QUEUE_CONNECTION=rabbitmq
#或者
RABBITMQ_WORKER=default
QUEUE_CONNECTION=rabbitmq