如何使用 RabbitMQ 和 Symfony 创建重复操作

你好! 😃 自从我们上次交谈以来已经有一段时间了,因为在自由开发者的生活中,很多事情都是在后台发生的。 嗯,这就是我们今天要讨论的一些内容,是的,是的,背景中的事情。

我将向您介绍 RabbitMQ 一个可以非常轻松地与 Symfony 结合使用的工具,它真正创造了性能和效率的强大组合。 我需要实现它 一个自制的小工具 允许我在社交媒体上安排帖子。 😁

什么是消息和总线?

在进入主题之前,我需要简要解释一下什么是消息。

“一个消息 ? 比如短信? 但到了 2024 年,每个人都会看到什么是信息!”

所以是的,但不完全是。 这里我们讨论的是内部消息 Symfony Messenger 组件。

在这种情况下,消息可以是任何内容,从简单的文本字符串到表示要执行的任务的复杂对象。 然后,它们通过总线传输,总线又充当分发系统,将消息路由到正确的接收者,称为 处理程序 或经理。

RabbitMQ 如何帮助优化 PHP 脚本?

“好吧,我们可以发送消息,但这有什么意义呢?”

想象一下,您有一个需要完成的重复任务,其中将包含多条消息。 让我们以一个允许您在社交网络上安排发布的工具为例。

因此,您可以在下午 6 点为多个不同帐户发布 15 条 Instagram 帖子、30 条推文等。

问题 ? 这可能需要大量资源,特别是当出版物包含要上传的文件时,更不用说 API 请求的数量,这可能或多或少很麻烦。

如果您是一位经验丰富的开发人员,您就会知道 PHP 是一种单线程语言,它会按照代码的执行顺序一次性处理所有内容。

正是在这种情况下,RabbitMQ 非常有趣,因为您将能够异步委托这些任务。 其中一个将独立于另一个,因此当处理较重的出版物时,您的出版物不会被阻止。 你跟着 ?

“确实看起来很有趣,但我想设置起来很复杂?”

好吧,一点也不! 😊

事实上,Symfony 已经将消息队列(是的,这就是这个原理的确切名称)所需的功能与 RabbitMq 集成在一起。 通过遵循上一个链接中的文档,您将可以轻松地将两者连接起来。 像往常一样,我建议您执行 用于 RabbitMQ 的容器 Docker 为了更加简单。 您还需要激活 PHP 的 AMQP 扩展。

一旦两者连接在一起,您将需要在 Symfony 中创建 2 个类。 与您要发送的消息相对应的一个。 与 Symfony 实体一样,您可以将属性和函数放在那里,以便可以在其他地方检索它们。

因此,当您启动发布脚本时,您将创建此类类型的消息对象,例如 Publication。

然后,您需要一个处理程序类来管理这些消息并知道如何处理它们。 对于我们来说,这里的目标是进行 API 调用以及应用程序所需的所有繁重工作。 事实上这部分将被发送并委托给 RabbitMQ。

“好吧,太好了,我有两个课程,我设法让它们正常工作,但那我该怎么办呢?”

好吧,如果一切都配置正确,那么除了运行脚本命令之外,您应该没有什么可做的,然后让 RabbitMQ 真正开始处理它,我们称之为“消费消息”,这会产生以下 Symfony 命令: bin/console messenger:consume async

有一个专门为此设计的 RabbitMQ 插件,称为 管理 这为您提供了一个图形界面来跟踪消息管理器中发生的情况。 这里有些例子 :

在这里我们可以看到一个实例正在等待,状态为“就绪”。 她需要那个命令 messenger:consume 被启动执行。

Symfony 命令:Messenger;消费

该帖子现已发布

自动发布推文

事实上,我们的出版物现已上线! 😀

结论:良好沟通的艺术

总而言之,我想说 RabbitMQ 是将消息管理变成简单直观的乐趣而不是令人头疼的最佳方式。 管理队列和错误使您可以自信地委派操作,同时保留一些控制权。

但是,请记住仔细遵循生产文档,因为毫无疑问,您的服务器上需要有工具来监控流程、在特定时间削减订单等。

好了,您现在拥有了将您的应用程序提升到新水平所需的一切😊

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​