【问题标题】:How to use MessageQueue feature of appserver.io inside existing laravel project如何在现有 laravel 项目中使用 appserver.io 的 MessageQueue 功能
【发布时间】:2016-03-19 15:11:06
【问题描述】:

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

建议不要使用pthreads,而是建议为什么不使用appserver.io - 它本身是完全多线程的php 服务器。可以使用它的MessageQueue 功能,将你所有的工作添加到这个队列中,它会自动分叉工作线程。你不必管理任何东西。

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

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

【问题讨论】:

    标签: php multithreading laravel appserver


    【解决方案1】:

    你可以从你的 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,在文件META-INF/message-queues.xml 中定义。该文件看起来像

    <?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>
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多