RabbitMQ安装及配套Laravel使用

简介: RabbitMQ安装及配套Laravel使用

MQ

MQ 全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。

为什么需要mq:

  • 解耦:MQ能够使各个系统或组件之间解耦,降低它们之间的耦合度,提高系统的灵活性和可维护性
  • 异步处理:通过MQ可以实现异步处理,提高系统响应速度和吞吐量。
  • 削峰:在高流量时段,MQ可以缓冲突增的请求,减轻下游系统的瞬时压力。
  • 可靠性:MQ通常提供持久化选项,确保消息不会因为网络问题或服务故障而丢失。
  • 扩展性:MQ支持分布式部署,可以根据系统需求灵活扩展。
  • 灵活性和路由:MQ支持多种消息路由方式,如直接、主题、扇形等,以适应不同的业务场景。
  • 多语言支持:大多数MQ支持多种编程语言,使得开发者可以使用自己熟悉的语言进行开发。

RabbitMQ

RabbitMQ是一个开源的,基于 AMQP(Advanced Message Queue 高级消息队列协议)协议,可复用的企业消息系统。 支持主流的操作系统,Linux、Windows、MacOs等 多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js

安装

本文安装 RabbitMQ 的系统为 centos7

  1. 更新系统包:首先更新系统中的软件包。
yum -y update
  1. 安装 EPEL 存储库:因为Erlang不在默认的 YUM 存储库中,需要安装 EPEL 存储库。
yum -y install epel-release
yum -y update
  1. 安装 ErlangRabbitMQ 是基于Erlang 开发的,因此需要先安装 Erlang。可以通过以下方式安装Erlang
  • Erlang官网下载Erlang存储库rpm包并安装。
  • 或者使用以下命令直接安装Erlang和socat(RabbitMQ依赖)
yum -y install erlang socat
  1. 检查Erlang版本:确认Erlang是否安装成功并检查版本.
erl -version

image.png

显示这种版本信息的表示是老版本,需要执行:

erl

image.png

其中这个 Erlang R16B03-1 就是对应rabbitmq 需要的erlang 环境的版本

rabbitmq 官网查询 erlang的关联版本

www.rabbitmq.com/docs/which-…

由于我这个是老版本的erlang 所以需要划到最下面

image.png

  1. 下载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的历史版本查看

github.com/rabbitmq/ra…

image.png

  1. 安装RabbitMQ:使用rpm命令安装下载的RabbitMQ包。
rpm -ivh rabbitmq-server-3.6.14-1.el6.noarch.rpm
  1. 启动RabbitMQ服务:启动RabbitMQ服务,并设置开机自启。
# 启动
systemctl start rabbitmq-server
# 开机启动
systemctl enable rabbitmq-server
  1. 安装管理界面插件:安装RabbitMQ的管理界面插件以便于管理。
rabbitmq-plugins enable rabbitmq_management
  1. 配置防火墙:如果服务器运行的是防火墙,需要开放RabbitMQ使用的端口,如5672和15672
firewall-cmd --zone=public --add-port=5672/tcp --permanent && firewall-cmd --reload
firewall-cmd --zone=public --add-port=15672/tcp --permanent && firewall-cmd --reload
  1. 创建用户:创建非默认用户以允许远程访问。
rabbitmqctl add_user 用户名 密码
rabbitmqctl set_user_tags 用户名 administrator
rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"
  1. 启动服务并检查状态:
systemctl start rabbitmq-server
systemctl status rabbitmq-server

打开浏览器,输入网址:http://****:15672,出现以下界面说明安装成功了

image.png

默认用户 guest guest 只能本机登录

主页概述

image.png

  • 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 包网址:

packagist.org/packages/vl…

本文用的laravel 版本为 9.33.0

  • 查看版本是否对应

laravel-queue-rabbitmqilluminate/queue 版本有要求,参照下列:

image.png

image.png

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'),//设置队列管理器
        ],

image.png

在env里面设置值:

#队列配置
QUEUE_CONNECTION=rabbitmq
RABBITMQ_HOST=192.168.18.130
RABBITMQ_PORT=5672
RABBITMQ_USER=test
RABBITMQ_PASSWORD=test
# 设置队列管理器:horizon
#RABBITMQ_WORKER=horizon

image.png

使用

laravel 队列使用文档:

learnku.com/docs/larave…

  • 创建任务
php artisan make:job Test

这个命令会创建一个test的任务类

image.png

  • 编辑任务类
<?php
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;
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 面板,消息如下:

image.png

  • 运行队列,消息消息

在项目根目录命令窗口执行以下命令:

php artisan queue:work

1722398417268_541DDB26-4E6E-49ce-98E2-8224ED49FE7E.png

1722398389295_774E9D3D-3B1D-4375-9D2B-2ADAAC40CDE8.png

总结

laravel-queue-rabbitmq 包为 Laravel 开发者提供了一个强大且灵活的方式来使用 RabbitMQ 作为消息队列解决方案,从而增强应用程序的异步处理能力和系统解耦。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 Linux API
centos7 安装rabbitmq自定义版本及配置
centos7 安装rabbitmq自定义版本及配置
|
3月前
|
消息中间件 关系型数据库 MySQL
入职必会-开发环境搭建52-RabbitMQ安装
RabbitMQ 是一款开源的消息队列软件,最初由 LShift 公司开发,后来成为 Pivotal Software(现在是 VMware 的一部分)的一部分。它是基于 AMQP(高级消息队列协议)标准的消息中间件,旨在帮助不同应用程序之间进行可靠的数据传输和通信。 RabbitMQ 提供了高度灵活的消息队列机制,可以在分布式环境中实现应用程序之间的异步通信。它支持多种消息传递模式,包括点对点、发布/订阅、请求/响应等,能够满足各种复杂的消息通信需求。
入职必会-开发环境搭建52-RabbitMQ安装
|
14天前
|
消息中间件 数据安全/隐私保护 Docker
Docker安装rabbitmq
如何使用Docker安装和配置RabbitMQ服务,包括拉取RabbitMQ镜像、创建容器、配置持久化和访问管理界面的步骤。
43 0
Docker安装rabbitmq
|
28天前
|
消息中间件 Linux
centos7安装rabbitmq
centos7安装rabbitmq
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
|
28天前
|
消息中间件 Linux
linux之centos安装rabbitmq
linux之centos安装rabbitmq
|
2月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
67 1
|
3月前
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
74 3
docker安装rabbitmq并配置hyperf使用
|
2月前
|
消息中间件 Ubuntu 安全
如何安装和管理RabbitMQ
如何安装和管理RabbitMQ
44 0