Что у меня есть:
- Служба 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
не добавлено ни одной работы. Когда я использую Почтальон, все в порядке. Однако, когда я пытаюсь отправить запрос от бэкэнда 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();
}
Может кто-нибудь посоветовать мне, что здесь не так и в чем причина проблемы?
Спасибо!