【问题标题】:IronMq + Laravel4: How make it workingIronMq + Laravel4:如何使其工作
【发布时间】:2013-10-10 08:46:47
【问题描述】:

IronMQ 接收了我的队列但没有触发这一事实,我有一个问题。 就像我在这个问题中问的那样: https://stackoverflow.com/questions/19200285/laravel4-ironmq-queue-are-not-executed

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

【问题讨论】:

  • 你是在本地主机还是实时服务器上?

标签: laravel queue laravel-4 iron


【解决方案1】:

我不确定您是否已完成订阅队列所需的所有步骤,所以让我们来看看它们:

在文件 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 路由器生成的。但是您也可能会看到一条错误消息,提示“无效数据。”,忽略它,我们没有进行真正的测试,我们只需要知道您的 marshal 路线是否有效。

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

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 调用。

如果确实如此,但您没有收到电子邮件,则队列正在工作,您必须检查您的电子邮件配置。

【讨论】:

  • 感谢您的回复。但我仍然陷入同样的​​境地:我在 IronMQ 中收到队列但没有被解雇。做你说的我得到这3个错误:在日志文件上有这个错误:[2013-10-10 14:16:44] log.ERROR:异常'Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException'。从 PowerShell 添加队列我收到此错误:基于 Iron.io 的队列必须是默认的。无论如何,正如您所说,我从 IronMQ 仪表板手动添加。再次手动添加后,任何列表中都没有显示任何内容。在任何情况下,如果我打开 MYAPP/队列,IronMQ 就会收到队列
  • 每次您在 IronMQ 中手动订阅一个 URL 时,它都会显示在一个列表中,对吧?
  • 我刚刚编辑了答案的顶部以包含配置详细信息。错误“基于 Iron.io 的队列必须是默认的。”一定是这样。 MethodNotAllowedHttpException 是因为您尝试使用 GET 请求访问您的 POST 方法。您是否使用 CURL --data 来访问它?
  • queue.php 已经正确配置。为了访问该站点,我使用了 curl MYAPP.COM/queue。我不知道哪些参数作为数据传递。
  • 我为 curl 写的那一行是我在这里用来测试的那一行。只需用您的网址替换网址即可。你不要t need to pass a real data, it's not a real test, but it MUST be a POST method. As I told you in the answer: 但是你可能还会看到一个错误说'无效数据',忽略它,我们没有做真正的测试,我们只需要知道你的元帅路线是否有效。`
【解决方案2】:

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

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

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

【讨论】:

  • 编辑了我的问题,将您的解决方案(更改队列类型)添加到解决同一问题的那些问题中。
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2018-12-01
  • 1970-01-01
  • 2011-03-15
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多