Есть новости по поводу Swoole + RabbitMQ. Добился от разработчика хоть какого то пояснения
ТУТ. Но опять же, пример кода который он выложил
у меня не работает. Пробовал сначала на виртуалке, потом на простом ubuntu сервере, но тщетно. Хотя картина более или менее проясняется.
Написал разработчику о проблеме, но он пока молчит. Потому хочу попросить тех, кто заинтересован, попробовать у себя запустить swoole вместе c rabbitmq. Вдруг все таки я криворук и пример кода рабочий. Если вы столкнетесь с такой же проблемой, то обязательно напишите об этом на гитхабе.
Шаг 1.
Установите Swoole
Если будете устанавливать Swoole, то устанавливайте с помощью команды:
sudo pecl install swoole-2.1.1
Не рекомендую устанавливать компилируя, иначе потом запаритесь удалять т.к. uninstaller не прилагается и команда "make uninstall" не сработает.
Обязательно должна быть версия 2.1.1. т.к. в версиях ниже нет coroutine.
Шаг 2:
Установите
IDE-helper, что бы было приятнее работать с методами и классами
Шаг 3:
Установите
phpAMQP. Это репозиторий который swoole форкнул себе и добавил поддержку Swoole. Т.е. команда
composer require php-amqplib/php-amqplib
установит только phpAMQP БЕЗ поддержки Swoole и вам нужно будет ручками добавить 2 файлика:
1) php-amqplib/PhpAmqpLib/Connection/AMQPSwooleConnection.php
2) php-amqplib/PhpAmqpLib/Wire/IO/SwooleIO.php
Шаг 4:
Установите
RabbitMQ
Удачи!
UPDATE: на StackOverflow помогли с решением:
https://stackoverflow.com/questions/49226659/swool...
Проблема была в том, что в worker.php я использовал экземпляр класса swoole_http_client, который как оказалось работает асинхронно.
Для синхронной работы потребуется WebSocketClient класс, который можно найти
тут
Далее заменить
$cli = new \swoole_http_client('0.0.0.0', 2345);
$cli->on('message', function ($_cli, $frame) {
var_dump($frame);
});
$cli->upgrade('/', function($cli)
{
$cli->push('This is the message to send to Swoole server');
$cli->close();
});
на
$client = new WebSocketClient('0.0.0.0', 2345);
$client->connect();
$client->send('This is the message to send to Swoole server');
$recv = $client->recv();
print_r($recv);
$client->close();
Все.