Мой существующий проект Laravel таков, что все задачи выполняются последовательно. Я определил часть кода, которая может быть запущена параллельно, используя PHP
темы и может сократить время отклика.
Вместо того, чтобы использовать pthreads
, было высказано предположение, что почему бы не использовать appserver.io — полностью многопоточный php
сам сервер. Можно использовать его MessageQueue
добавьте всю свою работу в эту очередь, и она автоматически разветвляет рабочие потоки. Вам не нужно ничего управлять.
Я уже развернул существующее приложение Laravel на appserver.io (скопированный проект /opt/appserver/webapps/
папку), но теперь я не знаю, как использовать сервер приложений MessageQueue
, Мой проект использует psr-4
где appserver есть psr-0
, У Laravel есть собственный DI и так же appserver.
Все, что я хочу сделать, это использовать appserver’s MessageQueue
чтобы больше работников выполняли одну функцию параллельно. Я новичок в appserver и не уверен, как должна выглядеть структура каталогов или какая у меня конфигурация. Любые указатели будут полезны.
Вы можете подключиться и отправить на MessageQueue
из вашего приложения Laravel. Сначала вы должны установить клиентскую библиотеку appserver-io/messaging
добавляя "appserver-io/messaging" : "~1.0
«на ваш composer.json. Затем вы можете отправить сообщение с
$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
и MessageQueue
называется pms/myQueue
, определенный в файле 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
например.
Хорошее начало пример приложение, которое поставляется с простым MessageQueue
пример запуска некоторой простой функциональности импорта.
Других решений пока нет …