Я получаю следующую ошибку при попытке позвонить 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
водитель, отправка просто, кажется, облажался
РЕДАКТИРОВАТЬ После дальнейших экспериментов кажется, что когда я звоню 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
Задача ещё не решена.
Других решений пока нет …