为什么须要mq:
解耦:MQ能够使各个别系或组件之间解耦,降落它们之间的耦合度,提高系统的灵巧性和可掩护性异步处理:通过MQ可以实现异步处理,提高系统相应速率和吞吐量。削峰:在高流量时段,MQ可以缓冲突增的要求,减轻下贱系统的瞬时压力。可靠性:MQ常日供应持久化选项,确保不会由于网络问题或做事故障而丢失。扩展性:MQ支持分布式支配,可以根据系统需求灵巧扩展。灵巧性和路由:MQ支持多种路由办法,如直接、主题、扇形等,以适应不同的业务场景。多措辞支持:大多数MQ支持多种编程措辞,使得开拓者可以利用自己熟习的措辞进行开拓。RabbitMQRabbitMQ是一个开源的,基于 AMQP(Advanced Message Queue 高等行列步队协议)协议,可复用的企业系统。 支持主流的操作系统,Linux、Windows、MacOs等 多种开拓措辞支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等
本文安装 RabbitMQ 的系统为 centos7

yum -y update
安装 EPEL 存储库:由于Erlang不在默认的 YUM 存储库中,须要安装 EPEL 存储库。
yum -y install epel-releaseyum -y update
安装 Erlang :RabbitMQ 是基于Erlang 开拓的,因此须要先安装 Erlang。可以通过以下办法安装Erlang:
• 从Erlang官网下载Erlang存储库rpm包并安装。
• 或者利用以下命令直接安装Erlang和socat(RabbitMQ依赖):
erl -version
检讨Erlang版本:确认Erlang是否安装成功并检讨版本.
erl -version
显示这种版本信息的表示是老版本,须要实行:
erl
个中这个 Erlang R16B03-1 便是对应rabbitmq 须要的erlang 环境的版本
在 rabbitmq 官网查询 erlang的关联版本
https://www.rabbitmq.com/docs/which-erlang
由于我这个是老版本的erlang 以是须要划到最下面
下载RabbitMQ:下载RabbitMQ的rpm包。
上面我们查询到的 rabbitmq 对应的版本是 3.6.14,以是我们下载对应的版本
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_14/rabbitmq-server-3.6.14-1.el6.noarch.rpm
github 上面 rabbitmq的历史版本查看
https://github.com/rabbitmq/rabbitmq-server/tags
安装RabbitMQ:利用rpm命令安装下载的RabbitMQ包。rpm -ivh rabbitmq-server-3.6.14-1.el6.noarch.rpm
启动RabbitMQ做事:启动RabbitMQ做事,并设置开机自启。
# 启动systemctl start rabbitmq-server# 开机启动systemctl enable rabbitmq-server
安装管理界面插件:安装RabbitMQ的管理界面插件以便于管理。
rabbitmq-plugins enable rabbitmq_management
配置防火墙:如果做事器运行的是防火墙,须要开放RabbitMQ利用的端口,如5672和15672
firewall-cmd --zone=public --add-port=5672/tcp --permanent && firewall-cmd --reloadfirewall-cmd --zone=public --add-port=15672/tcp --permanent && firewall-cmd --reload
创建用户:创建非默认用户以许可远程访问。
rabbitmqctl add_user 用户名 密码rabbitmqctl set_user_tags 用户名 administratorrabbitmqctl set_permissions -p "/" 用户名 "." "." "."
启动做事并检讨状态:
systemctl start rabbitmq-serversystemctl status rabbitmq-server
打开浏览器,输入网址:http://:15672,涌现以下界面解释安装成功了
默认用户 guest guest 只能本机登录
主页概述• connections:无论生产者还是消费者,都须要与RabbitMQ建立连接后才可以完成的生产和消费,在这里可以查看连接情形
• channels:通道,建立连接后,会形成通道,的投递获取依赖通道。
• Exchanges:交流机,用来实现的路由
• Queues:行列步队,即行列步队,存放在行列步队中,等待消费,消费后被移除行列步队。laravel 对接rabbitmq
laravel 对接rabbitmq有对应的composer 包:laravel-queue-rabbitmq
composer require vladimir-yuldashev/laravel-queue-rabbitmq
安装
查看对应 laravel的版本,和 laravel-queue-rabbitmq 是否对应
composer 包网址:
https://packagist.org/packages/vladimir-yuldashev/laravel-queue-rabbitmq
本文用的laravel 版本为 9.33.0
• 查看版本是否对应
laravel-queue-rabbitmq 对 illuminate/queue 版本有哀求,参照下列:
laravel 自带illuminate/queue版本查看:vendor->laravel->scout->composer.json
• 安装对应版本的包
composer require vladimir-yuldashev/laravel-queue-rabbitmq:^13.1.0 -vvv
配置
找到 config->queue.php 文件,添加以下配置:
'rabbitmq' => [ 'driver' => 'rabbitmq', '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', '/'), ], ], 'worker' => env('RABBITMQ_WORKER', 'default'),//设置行列步队管理器 ],
在env里面设置值:
#行列步队配置QUEUE_CONNECTION=rabbitmqRABBITMQ_HOST=192.168.18.130RABBITMQ_PORT=5672RABBITMQ_USER=testRABBITMQ_PASSWORD=test# 设置行列步队管理器:horizon#RABBITMQ_WORKER=horizon
laravel 行列步队利用文档:
https://learnku.com/docs/laravel/9.x/queues/12236
• 创建任务
php artisan make:job Test
这个命令会创建一个test的任务类
• 编辑任务类
<?phpnamespace 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;class Test 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() { //行列步队消费逻辑,此处就大略的打印一下 var_dump($this->data); }}
• 发送行列步队
创建一个测试掌握器,并编写测试
namespace App\Http\Controllers;use Illuminate\Foundation\Auth\Access\AuthorizesRequests;use Illuminate\Foundation\Bus\DispatchesJobs;use Illuminate\Foundation\Validation\ValidatesRequests;use Illuminate\Http\Request;use Illuminate\Routing\Controller as BaseController;class TestController extends BaseController{ public function test(){ \App\Jobs\Test::dispatch([ 'name'=>'这是一个测试行列步队', 'data'=>[ 'age'=>18, 'sex'=>1 ] ]); }}
• 要求接口创建
查看rabbitmq面板,如下:
• 运行行列步队,
在项目根目录命令窗口实行以下命令:
php artisan queue:work
总结
laravel-queue-rabbitmq 包为 Laravel 开拓者供应了一个强大且灵巧的办法来利用 RabbitMQ 作为行列步队办理方案,从而增强运用程序的异步处理能力和系统解耦。
– 欢迎点赞、关注、收藏【我码玄黄】,gonghao同名