返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Laravel 队列入门教程 (RabbitMQ)
  • 54
分享到

Laravel 队列入门教程 (RabbitMQ)

RabbitMQLaravel队列 2023-02-09 15:02:52 54人浏览 佚名
摘要

假设你已经学过了基础 laravel任务和队列 和本系列的第一部分, 我们学习使用不同的队列连接(除了数据库), 如何为不同的任务来使用不同的队列, 以及如何将某些任务/队列优先于其他的任务/队列。使用 RabbitMQ即使laravel社

假设你已经学过了基础 laravel任务和队列 和本系列的第一部分, 我们学习使用不同的队列连接(除了数据库), 如何为不同的任务来使用不同的队列, 以及如何将某些任务/队列优先于其他的任务/队列。

使用 RabbitMQ

即使laravel社区中默认的选择是在选择数据库连接之外的另一个队列连接时使用Redis,但我们将使用RabbitMQ

我决定介绍RabbitMQ的原因如下:

  • 与RabbitMQ相比,其他队列有很好的文档( 可以ka看看horizon https://learnku.com/docs/laravel/6.x/horizon, 这是Redis队列的laravel官方包)

  • 以我自己的经验来看, 我觉得RabbitMQ是优于其他队列的

  • 如果你正在阅读这篇文章, 那么你的新建任务和队列的世界里, 它更关注学习如何处理其他没有过多关注的如何安装Redis, 以及如何让它正确的工作在你的本地环境和生产环境。使用RabbitMQ 我们可以使用第三方服务来为我们托管和管理RabbitMQ实例。我的首选服务是cloudAMQP.com。 对于本教程来说,它的免费试用版已经足够了,而且对于许多支线项目,您可以工作(每月100万个工作,100个队列,……)

设置队列

前往 cloudamqp.com, 注册并创建一个 Little Lemur 实例

创建实例后,你将获得如下信息:

现在我们需要让 Laravel 知道我们将任务推送到 RabbitMQ。

首先,我们需要添加以下软件包: vladimir-yuldashev/laravel-queue-rabbitmq

composer require vladimir-yuldashev/laravel-queue-rabbitmq

然后,我们需要将以下连接添加到 config/queue.PHP 文件中

'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),
           ],
       ],

       
       'worker' => env('RABBITMQ_WORKER', 'default'),

    ],

然后我们需要更新 .env 文件,如下:

QUEUE_CONNECTION=rabbitmq
RABBITMQ_DSN=amqp://
RABBITMQ_HOST=woodpecker.rmq.cloudamqp.com
RABBITMQ_VHOST=ojydhdau
RABBITMQ_USER=ojydhdau
RABBITMQ_PASSWORD=Bctt-m_WhXrWdNGCb1L5D7D5j-3j-8Gc
RABBITMQ_QUEUE=jobs

PS:  .env 文件中已经存在 QUEUE_CONNECTION 变量,所以你只需更新现有的

在我们测试新配置之前,让我们做以下操作:

让我们打开 RabbitMQ 管理器,检查那里是否有队列和作业:

如您所见,我们没有任何队列或工作

现在,在发送任何新匹配之前,我们需要重新启动本地 WEB 服务器以考虑新的 .env 文件更改。

现在,如果您向应用程序发送新的 POST 请求,我们将注意到以下内容:

当我们切换到队列标签时,我们会注意到创建了一个新队列:

请注意,队列的状态为 idle ,并且一旦执行 queue:work 命令,状态将更改为 running ,并且队列将被执行

PS:使用 RabbitMQ 时,您无需手动检查队列工作器是否启动,您需要做的只是检查队列的状态(如果队列为「 idle(空闲)」,则表明它们不工作)。

使用多个队列

假设,现在您已经部署了应用程序并将其向公众开放。另一个从队列中受益的任务是向新注册的用户发送欢迎电子邮件。

你之所以要把这个任务委托给队列,原因之一是你很可能会使用第三方服务来发送邮件,而且你不想让用户等到邮件发出后才把他们重定向到应用程序控制面板(比如:用户页面。译者著)。

这个过程类似于处理传入的 POST 请求,每次我们想发送一个新的电子邮件时,它将被排队,然后在后台处理。

您会在此阶段注意到的一件事是,所有作业都是名为 jobs 的同一队列中的队列(请记住,我们的 .env 中具有此变量 RABBITMQ_QUEUE = jobs 文件)。

如果我们不指定要分配作业的队列名称,Laravel 会将其发送到默认队列。但是我们也可以将每种类型的作业发送到特定的队列中:

// 此作业以发送到默认队列
Job::dispatch();

// 此作业以发送到「电子邮箱」队列
Job::dispatch()->onQueue('emails');

现在,每当用户注册时,都会将新的欢迎邮件作业分配到 email 队列中。

为了处理作业,我们有两种选择

我们要么打开一个新选项并运行 queue:work 命令并专门侦听此队列:

php artisan queue:work –queue=emails

或者我们可以在同一选项中使用两个队列,但是在这里我们将为每个队列指定一个优先级。例如,如果我们要在处理任何电子邮件之前开始先处理 jobs 队列中的所有作业,则可以执行以下命令:

php artisan queue:work --queue=jobs,emails

PS: 在将应用程序部署到生产服务器时,很可能不需要设置优先级,因为我们将在每个队列后台进程上处理它们。

下一步是什么?

如果遵循上述操作,现在就可以将应用程序部署到生产服务器了。

在下一篇文章中,我们将介绍如何在远程服务器上运行队列,因为我们不能仅仅通过终端来使用它。

--结束END--

本文标题: Laravel 队列入门教程 (RabbitMQ)

本文链接: https://lsjlt.com/news/195394.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Laravel 队列入门教程 (RabbitMQ)
    假设你已经学过了基础 laravel任务和队列 和本系列的第一部分, 我们学习使用不同的队列连接(除了数据库), 如何为不同的任务来使用不同的队列, 以及如何将某些任务/队列优先于其他的任务/队列。使用 RabbitMQ即使laravel社...
    99+
    2023-02-09
    RabbitMQ Laravel 队列
  • 消息队列RabbitMQ入门与PHP实例分析
    本篇内容主要讲解“消息队列RabbitMQ入门与PHP实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“消息队列RabbitMQ入门与PHP实例分析”吧!消息队列介绍以及消息队列应用场景Ra...
    99+
    2023-06-30
  • Laravel框架教程 入门篇(一)
    安装Laravel 通过Composer安装 composer create-project laravel/laravel example-appcd example-appphp artisan ...
    99+
    2023-09-01
    laravel php
  • python对RabbitMQ的简单入门使用教程
    目录(一)RabbitMQ的简介(二)RabbitMQ的安装(三)python操作RabbitMQ(四)RabbitMQ简单模式(五)RabbitMQ发布订阅模式(六)RabbitM...
    99+
    2024-04-02
  • Spring整合消息队列RabbitMQ流程
    目录搭建生产者工程创建工程添加依赖配置整合发送消息搭建消费者工程创建工程添加依赖配置整合消息监听器搭建生产者工程 创建工程 添加依赖 修改pom.xml文件内容为如下: <...
    99+
    2023-03-20
    Spring RabbitMQ Spring整合消息队列 Spring整合RabbitMQ
  • Hbase列式存储入门教程
    目录1、逻辑结构2、物理结构3、增删改查4、应用场景5、参考资料HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。分布式是因为HBase底层使用HDFS存储数据,可...
    99+
    2024-04-02
  • Python入门教程(十二)Python列表
    目录Python 集合(数组)列表访问项目负的索引索引范围负索引的范围更改项目值遍历列表检查项目是否存在列表长度添加项目删除项目复制列表合并两个列表列表方法Python 集合(数组)...
    99+
    2023-05-16
    Python Python列表
  • php rdkafka操作kafka消息队列——k8s从入门到高并发系列教程(十七)
    安装kafka 通过docker 安装zookeeper docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper 安装kafka docker run -...
    99+
    2023-10-01
    kafka kubernetes java
  • Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
    rabbitmq中文翻译的话,主要还是mq字母上:Message Queue,即消息队列的意思。前面还有个rabbit单词,就是兔子的意思,和python语言叫python一样,老外还是蛮幽默的。rabbi...
    99+
    2022-06-04
    队列 实例教程 环境
  • Linux Shell脚本系列教程(一):Shell入门
    一、Shell简介 诸多类Unix操作系统的设计令人惊叹。即便是在数十年后的今天,Unix式的操作系统架构仍是有史以来最佳的设计之一。这种架构最重要的一个特性就是命令行界面或者shell。shell环境使得...
    99+
    2022-06-04
    脚本 入门 教程
  • node.js入门教程
    Node是个啥?   写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性的拿了些下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段。   1.Node 是一个服...
    99+
    2022-06-04
    入门教程 node js
  • Navicat入门教程
    本篇内容主要讲解“Navicat入门教程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Navicat入门教程”吧!一、 连接使用 1.1 连接数据库打...
    99+
    2024-04-02
  • ECharts入门教程
    Echart 官网:https://echarts.apache.org/zh/index.html下载页面:https://echarts.apache.org/zh/downlo...
    99+
    2024-04-02
  • ECMAScript6入门教程
    目录你的浏览器支持ES吗?ES 6 新特性汇总(一图全览)1. let、const 和 block 作用域2. 箭头函数(Arrow Functions)3. 函数参数默认值4. S...
    99+
    2024-04-02
  • HTML5 入门教程
    本篇内容主要讲解“HTML5 入门教程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5 入门教程”吧!JavaScript作为一种弱类型语言,最大的特点就是动态类型。也就是说不用提前声明...
    99+
    2023-06-09
  • Flask 入门教程
    Flask 入门教程 一、Flask简单使用 1、准备环境 硬件:Windows 7+python 3.6+安装软件:pycharm安装(社区版)、python环境安装 2、简单的Flask应用 本地...
    99+
    2023-10-07
    flask python 后端
  • Lighttpd入门教程
    Lighttpd入门教程 概述入门教程安装配置静态文件服务动态文件服务 虚拟主机SSL启动服务器日志模块总结lighthttpd使用场景和原理使用场景原理 概述 Lightt...
    99+
    2023-09-04
    服务器 linux ubuntu
  • maven3 入门教程
    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令:  1. 创建Maven的普通java项目:  ...
    99+
    2023-01-31
    入门教程
  • Jmeter入门教程
    目录一、下载二、安装三、运行四、一个简单的压测实例五、如何查看系统负载何性能瓶颈jemter简介 jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全...
    99+
    2024-04-02
  • IPv6入门教程
    本篇文章主要从基础概念、IPv6的相关网络工具、关于移动应用在IPv6和IPv4网络环境中自动降级机制的研究等三个方面介绍了IPv6的入门教程。前言众所周知,32位的IPv4地址已经基本耗尽(这里的耗尽只是说的分配完了,实际上有相当一部分并...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作