Php 帮助我了解消息队列是如何工作的

Php 帮助我了解消息队列是如何工作的,php,message-queue,Php,Message Queue,我已经使用PHP有一段时间了,我想知道整个“消息队列”都是关于什么的。让我们以facebook为例。我可以更新我的状态,但我必须向我所有的朋友显示状态更新(假设我有3000个追随者)。如果有评论,甚至更多的工作,他们必须通过电子邮件通知所有留下评论的朋友。在我看到的示例中,消息队列所做的似乎就是获取“消息”(我的状态更新)并将其放入某个临时空间(文件系统或DB表)。然后,我有一个cron作业,可以将其取出并更新我的表 那么,我该如何处理这些数据呢?我想我对这对我有什么帮助感到困惑。如何将以下函数

我已经使用PHP有一段时间了,我想知道整个“消息队列”都是关于什么的。让我们以facebook为例。我可以更新我的状态,但我必须向我所有的朋友显示状态更新(假设我有3000个追随者)。如果有评论,甚至更多的工作,他们必须通过电子邮件通知所有留下评论的朋友。在我看到的示例中,消息队列所做的似乎就是获取“消息”(我的状态更新)并将其放入某个临时空间(文件系统或DB表)。然后,我有一个cron作业,可以将其取出并更新我的表

那么,我该如何处理这些数据呢?我想我对这对我有什么帮助感到困惑。如何将以下函数转换为消息队列,然后安排函数在以后运行

1-更新我的状态 2-现在在我的页面和我所有的朋友中发布它。 3-如果留下评论,现在将最新评论通过电子邮件发送给“订阅”该评论的人

我的问题是,我如何处理这些数据?我是否只是插入“注释”,然后有一个“作业”将注释取出并插入到处理它的函数中

下面是一个我打算研究的例子

提前谢谢

我的问题是,我如何处理这些数据?我要插入吗 “评论”然后有一个“工作” 那就把那条评论拉出来,插上插头 将它转换为处理它的函数

没错

在Facebook页面上发布状态更新可能不涉及消息排队——我不知道它们的具体设计,但我猜更新的数据只是在用户加载页面时通过查询按需提供的。(除非Facebook有一个单独的流程去规范化状态更新数据。)1

相比之下,发送状态更新电子邮件通知是消息队列的最佳选择

典型的实现包括将新消息(通常是最小的,可能只是您的用户id)写入特定的消息队列-可能是“EmailStatusUpdateNotifications”队列

然后,另一个进程将消息出列,并确切地知道如何处理它们。专门用于发送状态更新电子邮件的流程将使用用户id(邮件内容)加载您的当前状态和朋友的电子邮件地址列表,生成电子邮件并发送它们

1事实证明,您可以在中找到许多关于Facebook架构的好信息,并且具有很高的可扩展性

我是否只是插入“注释”,然后有一个“作业”将注释取出并插入到处理它的函数中

消息队列的要点之一是分离服务,并进行异步处理

您将运行一个消息队列服务,当有人更改其状态时,您将向特定队列发送消息。您可以从当用户更改其状态时运行的php代码中执行此操作

然后,您将在某个地方运行一个服务/后台作业,从该队列中提取消息。它肯定是基于HTTP调用发送消息的PHP进程外部的东西。该作业从队列中提取消息,进行消息处理,例如确定要向谁发送邮件,然后发送邮件

现在,您可以灵活地处理此类邮件更新

  • 邮件更新服务很容易在web服务器以外的另一台机器上运行
  • 如果需要更大功率,则更易于扩展
  • 您可以更轻松地实施延迟发送-例如,您可以等待一分钟或两分钟发送邮件,如果用户再次更新其状态,您只发送一封邮件,而不是两封
  • 如果您在更改其状态的用户的http请求中完成了所有这一切,那么他将不得不等待所有处理完成

谢谢您的解释。消息队列是否可以有多个“列”。如果我正在存储用户id和消息,我的函数需要以某种方式对其进行解析。或者它只是一个简单的“文件”。确切地说(再次)——您可以控制消息的内容(或正文)和格式,您的处理器或函数只需要知道如何解析它们。(大多数消息队列实现还提供各种序列化格式,但通常不需要直接处理这些格式,除非您正在浏览原始队列内容。)啊,好的。我想xml会派上用场的,嗯?如果您需要复杂的消息并且有很好的库支持,那么肯定会派上用场。对于简单的消息,您可以只使用逗号或分号分隔的列表(或JSon等)。消息队列是一种异步的、面向拉动的技术,因此在创建消息时,工作进程不需要可用(甚至不存在)。支持该工作流需要对审核消息及其传递、提供故障恢复点和确保其事务完整性(以及其他事项)提供大量额外支持。是的,我遇到了发送大量电子邮件的问题!我必须弄清楚在提取数据时使用哪种语言。我想知道php通过CLI的工作情况如何。