2

I have a problem concerning the fact that my queues are received by IronMQ but not fire off. Like i ask in this question: https://stackoverflow.com/questions/19200285/laravel4-ironmq-queue-are-not-executed

But i see that inside my Iron dashboard, after i subscribe a new domain, then it is not added in any list. Probably IronMQ should display a list of Domains subscribed, isn't it? And this is probably the reason why my queues are not fire off. How can i fix the issue? Thanks!

4

2 回答 2

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!');我们添加到您的 marshal 路由器生成的。但是您可能还会看到一条错误消息“无效数据。”,忽略它,我们没有进行真正的测试,我们只需要知道您的元帅路线是否有效。

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

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

如果是这样并且您没有收到电子邮件,则队列正在工作,您必须检查您的电子邮件配置。

于 2013-10-10T13:59:08.630 回答
2

感谢安东尼奥·里贝罗的帮助!为了使一切正常工作,需要进行一些更改: 在 IronMQ 中,我必须更改队列的类型,从 PULL 更改为 MULTICAST 现在我终于可以看到我订阅的 URL 列表了。如果我运行测试应用程序,它运行顺利并且队列被正确触发。

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

正如我在附图中看到的那样,您的队列具有“拉”类型。这意味着队列不会触发 HTTP(S) POST 到端点,您需要通过 API(或客户端库中的“get”方法/函数)获取消息。要将队列变为“推送”类型,您可以: 1) 更新队列信息并添加至少一个推送队列相关参数(例如,“subscribers”:[ {“url”:“proto://domain/path”} ])。请参阅 http://dev.iron.io/mq/reference/push_queues/ 2) 通过 HUD 更改队列类型的更多信息。

编辑:

好的,最后澄清一下:也可以设置 UNCAST。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.
于 2013-10-10T16:59:46.707 回答