Что у меня есть:
- Сервис Lumen, обрабатывающий конкретную работу
- Портал Laravel, который отправляет файл в этот сервис для обработки им
Когда он использовал только JS и Ajax, он работал почти нормально — единственное, что мне нужно было реализовать, — это промежуточное ПО CORS. Однако после того, как я переместил логику в JWT (используя пакет jwt-auth
) и GuzzleHttp (я использую его для отправки запросов в сервисный API), задание перестало обрабатывать очередь базы данных, вместо этого оно работает, как если бы для драйвера очереди было установлено значение sync
.
Ниже приведен контроллер, который я вызываю во время вызова API:
public function processPackageById(Request $request) {
$id = $request->package_id;
$package = FilePackage::where('id', '=', $id)->where('package_status_id', '=', 1)->first();
if($package) {
Queue::push(new PackageProcessingJob(
$this->firm,
$this->accounts,
$package
));
return 'dispatching done for ' . $id;
}
return 'dispatching not done for ' . $id;
}
где $this->firm
и $this->accounts
вводятся репозитории для конкретных моделей. FilePackage
объект создается на сайте Laravel, и оба используют одну и ту же базу данных для работы.
В результате задание не вставляется в таблицу jobs
. Когда я использую Postman, все в порядке. Однако, когда я пытаюсь отправить запрос из бэкэнда Laravel:
public function uploaderPost(Request $request)
{
// Here we get auth token and put into protected valiable `$this->token`
$this->authorizeApi();
$requestData = $request->except('_token');
$package = $requestData['file'];
$uploadPackageRequest =
$this->client->request('POST', config('bulk_api.url') .'/api/bulk/upload?token=' . $this->token,
[
'multipart' => [
[
'name' => 'file',
'contents' => fopen($package->getPathName(), 'r'),
'filename' => $package->getClientOriginalName(),
],
]
]);
$uploadPackageRequestJson = json_decode($uploadPackageRequest->getBody()->getContents());
$uploadPackageRequestStatus = $uploadPackageRequestJson->status;
if($uploadPackageRequestStatus == 1) {
$package = BulkUploadPackage::where('id', '=',$uploadPackageRequestJson->id)->first();
// If package is okay - running it
if($package !== null){
// Here where I expect job to be dispatched (code above)
$runPackageRequest =
$this->client->request('POST', config('api.url') .'/api/bulk/run?token=' . $this->token,
[
'multipart' => [
[
'name' => 'package_id',
'contents' => $package->id
],
]
]);
// Here I'm receiving stream for some reason
dd($runPackageRequest->getBody());
if($runPackageRequest->getStatusCode()==200){
return redirect(url('/success'));
}
}
}
return back();
}
Может ли кто-нибудь посоветовать мне, что здесь не так и что вызывает проблему? Благодарю вас!