IronMq + Laravel4:如何使它工作

时间:2013-10-10 08:46:47

标签: laravel queue laravel-4 iron

我遇到的问题是我的队列是由IronMQ收到但没有开火的。 就像我在这个问题中提出的: https://stackoverflow.com/questions/19200285/laravel4-ironmq-queue-are-not-executed

但是我在Iron仪表板中看到,在我订阅了一个新域之后,它没有被添加到任何列表中。 可能IronMQ应该显示一个域名列表,不是吗? 这可能是我的队列没有被解雇的原因。 我该如何解决这个问题? 谢谢!

2 个答案:

答案 0 :(得分:9)

我不确定你是否已经完成了所有必要的步骤来订阅你的队列,所以我们来看看它们:

在app / config / queue.php文件中将队列默认配置为Iron,设置:

'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或类似的东西来访问它:

curl --data "param1=whatever" http://<your.domain.com>/queue

编辑:您可以复制整行,只需重新填充您的网址。

在文件夹中打开日志文件:

app/storage/logs/

你应该在那里看到类似的东西:

[2013-10-10 10:26:09] log.INFO: marshal! [] []

它是由我们添加到您的编组路由器的Log::info('marshal!');生成的。但你也可能会看到一个错误,上面写着“数据无效。”,igore它,我们没有进行真正的测试,我们只需要知道你的编组路线是否正常工作。

现在,您可以在IronMQ上为特定队列注册您的网址:

php artisan queue:subscribe <queue name on IronMQ> <url>

一个例子是:

php artisan queue:subscribe johnnyfittizio http://<your.domain.com>/queue

这是您之前在测试中使用的相同网址。

此命令必须显示:

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:marshal!”出现在那里。这次它必须显示但被IronMQ调用。

如果确实如此,并且您没有收到电子邮件,则队列正在运行,您必须检查电子邮件配置。

答案 1 :(得分:2)

感谢Antonio Ribeiro的帮助! 让一切运转起来有一些变化: 进入IronMQ我不得不改变队列类型,从PULL到MULTICAST 现在我可以看到我订阅的URL列表。 如果我运行测试应用程序,它可以顺利运行并且队列可以正常启动。

如果你想知道原因,这就是Iron.io支持的答案:

  

正如我在附图中看到的,您的队列具有“拉”类型。这意味着排队   没有触发HTTP(S)POST到端点,你需要获取消息   通过API(或客户端库中的“获取”方法/功能)。转动你的   队列到“推”类型你可以:1)更新队列信息并至少添加   一个推送队列相关参数(例如,“订户”:[   {“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.