Я получаю следующую ошибку при попытке вызвать dispatch
в моем проекте Lumen:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in /var/www/vendor/illuminate/container/Container.php on line 707
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in Unknown on line 0
Моей первой мыслью было увеличение лимита памяти в php.ini
до 1G, но процесс продолжает поглощать всю память приложения, а затем выдает вышеуказанную ошибку.
Внутри моего контроллера у меня есть следующий фрагмент кода:
private function attemptCapture(array $options = [])
{
$response = array_merge(
[
'code' => 200,
'message' => '',
],
[]
);
dispatch(new ExampleJob());
return $response;
}
ExampleJob.php
namespace App\Jobs;
use Illuminate\Support\Facades\Log;
class ExampleJob extends Job
{
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
// dd('got here'); // this gets called
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info('got here');
}
}
Я использую Laravel queue.php
по умолчанию в моем файле /config/queue.php
, и я использую redis
в качестве QUEUE_DRIVER
, и я использую default
в качестве QUEUE_REDIS_CONNECTION
, поскольку я предполагаю, что будет использовать соединение, которое я установил в моем redis['default']
в database.php
Я озадачен тем, почему это не удается, я получаю те же результаты, даже если я использую драйвер sync
, диспетчер просто кажется, что испортил
EDIT После некоторых дальнейших экспериментов кажется, что когда я вызываю dispatch
из контроллера (переданного по HTTP-маршруту), диспетчер попытается снова вызвать маршрут вместо того, чтобы запустить задание или нажать задание в очередь.
Этот код вызывается в цепочке отправки:
protected function callActionOnArrayBasedRoute($routeInfo)
{
$action = $routeInfo[1];
if (isset($action['uses'])) {
return $this->prepareResponse($this->callControllerAction($routeInfo));
}
foreach ($action as $value) {
if ($value instanceof Closure) {
$closure = $value->bindTo(new RoutingClosure);
break;
}
}
try {
return $this->prepareResponse($this->call($closure, $routeInfo[2]));
} catch (HttpResponseException $e) {
return $e->getResponse();
}
}
Который имеет: array(1) { ["uses"]=> string(52) "App\Http\Controllers\Operator\CaptureController@test" }
в качестве полезной нагрузки, которую он получает.
Я не пытаюсь отправить новое действие @test, я хочу отправить ExampleJob