IronMq + Laravel4: как заставить это работать
У меня проблема с тем, что IronMQ получает мои очереди, но не отключается. Как я спрашиваю в этом вопросе: https://stackru.com/questions/19200285/laravel4-ironmq-queue-are-not-executed
Но я вижу, что внутри моей железной панели инструментов, после того, как я подписываюсь на новый домен, он не добавляется ни в один список. Вероятно, IronMQ должен отображать список подписанных доменов, не так ли? И это, вероятно, причина, по которой мои очереди не сгорают. Как я могу решить проблему? Спасибо!
2 ответа
Я не уверен, что вы выполнили все необходимые шаги, чтобы подписаться на свои очереди, поэтому давайте посмотрим на них:
Настройте свою очередь на использование по умолчанию как Iron в файле app/config/queue.php, установите:
'default' => 'iron',
И настройте ваше соединение:
'iron' => array(
'driver' => 'iron',
'project' => 'YOUR PROJECT NUMBER',
'token' => 'YOUR TOKEN',
'queue' => 'YOUR QEUE NAME',
),
Создайте маршрут для конечной точки очереди / получения и верните ответ из метода Queue::marshal:
Route::post('queue', function()
{
Log::info('marshal!');
return Queue::marshal();
});
И проверить это! Вне вашего сервера доступ к нему с помощью завитка или что-то вроде этого:
curl --data "param1=whatever" http://<your.domain.com>/queue
редактировать: вы можете скопировать всю эту строку и просто повторить с вашим URL.
Откройте файл журнала в папке:
app/storage/logs/
Вы должны увидеть что-то вроде этого:
[2013-10-10 10:26:09] log.INFO: marshal! [] []
Это было сгенерировано Log::info('marshal!');
мы добавили в ваш маршал роутер. Но вы также можете увидеть сообщение об ошибке "Неверные данные". Проигнорируйте это, мы не проводили настоящий тест, нам просто нужно было знать, работает ли ваш маршрут маршала.
Теперь вы можете зарегистрировать свой URL для конкретной очереди в IronMQ:
php artisan queue:subscribe <queue name on IronMQ> <url>
Примером может быть:
php artisan queue:subscribe johnnyfittizio http://<your.domain.com>/queue
Это тот же URL, который вы использовали в тесте ранее.
Эта команда ДОЛЖНА показывать вам:
Queue subscriber added: http://<your.domain.com>/queue
Если этого не произойдет, вам придется проверить свою конфигурацию снова, возможно, вы сделали что-то не так.
Затем вы можете перейти на страницу очереди вашего IronMQ и проверить, подписана ли ваша очередь:
1. Go to https://hud.iron.io/dashboard
2. On your projects, click in tue MQ button of your project
3. Select the "Queues" tab
4. Click on your queue name, this must be the same you subscribed to using the command "artisan queue:subscribe"
5.In the "PUSH INFORMATION" box, check if your queue push type is set to "multicast".
6.Check if your queue is subscribed in the "SUBSCRIBERS" box, it's in the page bottom right area.
Если все настроено, снова запустите свою электронную почту (через очередь) и проверьте журнал, чтобы увидеть, если "log.INFO: маршал!" появляется там На этот раз он должен показывать, но вызывается IronMQ.
Если это так, и вы не получаете электронное письмо, очередь работает, и вы должны проверить свою конфигурацию электронной почты.
Спасибо Антонио Рибейру за помощь! Было сделано небольшое изменение, чтобы все работало: в IronMQ мне пришлось изменить тип очереди с PULL на MULTICAST. Теперь я наконец вижу свой список подписанных URL-адресов. И если я запускаю тестовое приложение, оно работает гладко, и очереди запускаются правильно.
Если вы хотите знать почему, это был ответ от поддержки Iron.io:
как я вижу в прикрепленном изображении, ваша очередь имеет тип "тянуть". Это означает, что очередь не запускает HTTP(S) POST для конечной точки, и вам нужно получать сообщения через API (или метод / функцию "get" в клиентской библиотеке). Чтобы превратить вашу очередь в тип "push", вы можете: 1) обновить информацию об очереди и добавить хотя бы один параметр, связанный с "push-очередью" (например, "подписчики": [ {"url": "proto://domain/path"} ]). Смотрите дополнительную информацию на http://dev.iron.io/mq/reference/push_queues/ 2) через HUD, меняя тип очереди.
РЕДАКТИРОВАТЬ:
Хорошо, только для последнего разъяснения: также можно установить UNICAST. Разница между ними была объяснена поддержкой Iron.io:
Yes, you are able to add URLs to your push queues, both multicast and unicast.
Multicast sends message through POST to all subscribers URLs at the same time
and retries on failed endpoints.
But unicast sends to subscribers by turn while one of them returns
right response and retries if all endpoints in subscribers list failed.