【问题标题】:Problems with Laravel 4 QueueLaravel 4 队列的问题
【发布时间】:2013-07-03 09:21:25
【问题描述】:

我是第一次在 L4 中设置队列,我遇到了一些问题。 我有这样的简单控制器方法:

public function getIndex()
{
    $data = array(
        'offset' => 3300000,
        'site'   => 1
    );
    Queue::push('Class@jobmethod', $data);
    return 'OK!';
}

在工作方法的底部,我做了这样的事情:

public function jobmethod()
{
    ....
    $data = array(
        'offset' => $data['offset'] + 100,
        'site'   => $data['site']
    );
    Queue::push('Class@jobmethod', $data);
    $job->delete();
}

因此,作业以更高的偏移量再次循环通过队列。 现在我的问题是,当我在浏览器中调用控制器方法时,它永远不会返回 OK!,而是继续加载页面?我将作业设置为登录数据库表,我可以看到它一直运行多次。

有人知道这里发生了什么吗?

【问题讨论】:

    标签: php frameworks queue laravel jobs


    【解决方案1】:

    我猜你的默认队列处理程序设置为“同步”。你可以在 app/config/queue.php 中查看。

    这样做是直接处理事件,因为没有安装实际的队列。

    因此,在您的情况下,它将不断运行作业方法,因为它不断迭代同一个函数。如果在jobmethod中去掉Queue push,会返回OK。

    因此,要完成这项工作,您必须安装像 Beanstalkd 这样的排队系统。如果这样做,请确保在 composer.json 的 require 部分添加 "pda/pheanstalk": "dev-master"

    如果您想运行队列,请查看我对这个问题的回答:How to fire Laravel Queues with beanstalkd

    【讨论】:

      【解决方案2】:

      我认为你正在进入无限递归

      public function getIndex()
      {
          $data = array(
              'offset' => 3300000,
              'site'   => 1
          );
          Queue::push('Class@jobmethod', $data); //Here you push the job to the queue
          return 'OK!';
      }
      
      
      public function jobmethod()
      {
          ....
          $data = array(
              'offset' => $data['offset'] + 100,
              'site'   => $data['site']
          );
          Queue::push('Class@jobmethod', $data); //This is creating infinite recursion!!!
          $job->delete();
      }
      

      考虑这个变体:

      public function getIndex()
          {
              $data = array(
                  'offset' => 3300000,
                  'site'   => 1
              );
              Queue::push('Class@jobmethod', $data); //Here you push the job to the queue
              return 'OK!';
          }
      
      
          public function jobmethod($data)
          {
              ....
              //Queue::push('Class@jobmethod', $data); //This is creating infinite recursion!!!
              $job->delete();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2021-12-03
        • 1970-01-01
        • 2013-06-24
        相关资源
        最近更新 更多