RabbitMQ安装及配套Laravel使用 linux安装rabbitmq教程
bigegpt 2024-10-12 06:01 13 浏览
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
- 更新系统包:首先更新系统中的软件包。
yum -y update
- 安装 EPEL 存储库:因为Erlang不在默认的 YUM 存储库中,需要安装 EPEL 存储库。
yum -y install epel-release
yum -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 --reload
firewall-cmd --zone=public --add-port=15672/tcp --permanent && firewall-cmd --reload
- 创建用户:创建非默认用户以允许远程访问。
rabbitmqctl add_user 用户名 密码
rabbitmqctl set_user_tags 用户名 administrator
rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"
- 启动服务并检查状态:
systemctl start rabbitmq-server
systemctl 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=rabbitmq
RABBITMQ_HOST=192.168.18.130
RABBITMQ_PORT=5672
RABBITMQ_USER=test
RABBITMQ_PASSWORD=test
# 设置队列管理器:horizon
#RABBITMQ_WORKER=horizon
使用
laravel 队列使用文档:
https://learnku.com/docs/laravel/9.x/queues/12236
? 创建任务
php artisan make:job Test
这个命令会创建一个test的任务类
? 编辑任务类
<?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面板,消息如下:
? 运行队列,消息消息
在项目根目录命令窗口执行以下命令:
php artisan queue:work
总结
laravel-queue-rabbitmq 包为 Laravel 开发者提供了一个强大且灵活的方式来使用 RabbitMQ 作为消息队列解决方案,从而增强应用程序的异步处理能力和系统解耦。
– 欢迎点赞、关注、收藏【我码玄黄】,gonghao同名
相关推荐
- Go语言泛型-泛型约束与实践(go1.7泛型)
-
来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...
- golang总结(golang实战教程)
-
基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...
- Go 官宣:新版 Protobuf API(go pro版本)
-
原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...
- Golang开发的一些注意事项(一)(golang入门项目)
-
1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...
- golang 托盘菜单应用及打开系统默认浏览器
-
之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...
- golang标准库每日一库之 io/ioutil
-
一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...
- 文件类型更改器——GoLang 中的 CLI 工具
-
我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...
- Go (Golang) 中的 Channels 简介(golang channel长度和容量)
-
这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...
- Golang引入泛型:Go将Interface「」替换为“Any”
-
现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...
- 一文带你看懂Golang最新特性(golang2.0特性)
-
作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...
- Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移
-
以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...
- Golang使用grpc详解(golang gcc)
-
gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...
- Etcd服务注册与发现封装实现--golang
-
服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...
- Golang:将日志以Json格式输出到Kafka
-
在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...
- 如何从 PHP 过渡到 Golang?(php转golang)
-
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)