如何在现有 laravel 项目中使用 appserver.io 的 MessageQueue 功能

How to use MessageQueue feature of appserver.io inside existing laravel project

我现有的 Laravel 项目是这样的,所有任务都是按顺序执行的。我已经确定了部分代码可以 运行 并行使用 PHP 线程并且可以减少响应时间。

没有使用 pthreads,有人建议为什么不使用 appserver.io - 这是完全多线程的 php 服务器本身。可以使用它的 MessageQueue 特性,将你所有的作业添加到这个队列中,它会自动派生工作线程。您无需管理任何事情。

我已经在 appserver.io 上部署了现有的 Laravel 应用程序(在 /opt/appserver/webapps/ 文件夹下复制的项目),但现在我不知道如何使用应用程序服务器的 MessageQueue。我的项目使用 psr-4,而 appserver 是 psr-0。 Laravel 有自己的 DI,appserver 也有。

我只想使用应用程序服务器的 MessageQueue 让更多的工作人员并行执行一个功能。我是 appserver 的新手,不确定目录结构应该是什么样子或者我有什么配置。任何指针都会有所帮助。

您可以从 Laravel 应用程序连接并发送到 MessageQueue。首先,您必须通过将 "appserver-io/messaging" : "~1.0" 添加到 composer.json 来安装客户端库 appserver-io/messaging。然后您可以使用

发送消息
$queue = MessageQueue::createQueue('pms/myQueue');
$connection = QueueConnectionFactory::createQueueConnection('my-laravel-app');
$session = $connection->createQueueSession();
$sender = $session->createSender($queue);
$sender->send(new StringMessage('Some String'));

假设您有一个名为 my-laravel-app 的应用程序,它驻留在文件夹 /opt/appserver/webapps/my-laravel-app 中,还有一个名为 pms/myQueueMessageQueue,在文件 [=19= 中定义].该文件看起来像

<?xml version="1.0" encoding="UTF-8"?>
<message-queues xmlns="http://www.appserver.io/appserver">
    <message-queue type="MyReceiverClass">
        <destination>pms/myQueue</destination>
    </message-queue>
</message-queues>

在该示例中,接收器 class MyReceiverClass 必须在 /opt/appserver/webapps/my-laravel-app/META-INF/classes/MyLaravelApp/Receivers/MyReceiverClass 下可用。

一个好的开始是 example 应用程序,它带有简单的 MessageQueue 示例 运行 一些简单的导入功能。