当前位置:首页 > Web开发 > 正文

因此我们将其 称为worker.php : $callback = function ( $msg ) { echo ‘

2024-03-31 Web开发

2019年12月10日10:01:00

原文:https://www.rabbitmq.com/tutorials/tutorial-three-php.html

事情行列队伍 (使用php-amqplib

先决条件

本教程假定RabbitMQ 在标准端口(5672)的本田主机安置并运行如果您使用其他主机,端口或根据,则连接设置需要进行调解。

在哪里获得辅佐

如果您在阅读本教程时遇到困难,可以 通过邮件列表联系。

在第一个教程中,我们编写了措施来发送和接收来自定名行列队伍的动静。在这一部分中,我们将创建一个事情行列队伍,该行列队伍将用于在多个事情人员之间分配耗时的任务。

事情行列队伍(又称任务行列队伍的主要思想是制止当即执行资源密集型任务,而不得不期待它完成。相反,我们布置任务在以后完成。我们将任务封装 为动静并将其发送到行列队伍。在后台运行的事情进程将弹出任务并最终执行功课。当您运行许多事情人员时,任务将在他们之间共享。

这个观点在Web应用措施中出格有用,因为在Web应用措施中,不成能在较短的HTTP请求窗口内措置惩罚惩罚庞大的任务。

制备

在本教程的上半部分,我们发送了一条包罗“ Hello World!”的动静。此刻,我们将发送代表庞大任务的字符串。我们没有现实世界的任务,例如要调解巨细的图像或要衬着的pdf文件,所以我们假装本身很忙-使用sleep()函数来伪造它我们将字符串中的点数作为它的庞大度。每个点将占“事情”的一秒。例如,Hello ...描述的虚假任务 将花费三秒钟。

我们将稍微改削上一个示例中send.php代码,以允许屈从令行发送任意动静。该措施会将任务布置到我们的事情行列队伍中,因此将其定名为 new_task.php

$data = implode(‘ ‘, array_slice($argv, 1)); if (empty($data)) { $data = "Hello World!"; } $msg = new AMQPMessage($data); $channel->basic_publish($msg, ‘‘, ‘hello‘); echo ‘ [x] Sent ‘, $data, "\n";

我们旧的receive.php脚本也需要进行一些变动:它需要为动静正文中的每个点伪造一秒钟的事情。它会从行列队伍中弹出动静并执行任务,因此我们将其称为worker.php

$callback = function ($msg) { echo ‘ [x] Received ‘, $msg->body, "\n"; sleep(substr_count($msg->body, ‘.‘)); echo " [x] Done\n"; }; $channel->basic_consume(‘hello‘, ‘‘, false, true, false, false, $callback);

请注意,我们的假任务模拟执行时间。

凭据教程一运行它们:

# shell 1 php worker.php # shell 2 php new_task.php "A very hard task which takes two seconds.."

循环调理

使用任务行列队伍的长处之一是能够轻松并行化事情。如果我们正在积压事情,我们可以增加更多的工人,这样就可以轻松扩展。

首先,让我们测验考试同时运行两个worker.php脚本。他们俩都将从行列队伍中获打动静,但是究竟如何呢?让我们来看看。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32113.html