Поскольку я новичок в Laravel, в настоящее время я использую очередь и имею следующую проблему с заданием. Поскольку API, который я вызываю, может дросселировать, мне нужна эта логика для каждого вызываемого метода, поэтому я создал родительский (базовый) класс. (не уверен, что это правильный путь, пожалуйста, поправьте меня, если я ошибаюсь и здесь)
Итак, у меня есть JobClass
, который расширяет BaseJobClass
, который должен обрабатывать создание клиента API.
Базовая работа
class BaseJob implements ShouldQueue
{
protected function performActionOrThrottle($method, $parameters, Customer $customer, Marketplace $marketplace) {
$client = $this->createClient($customer, $marketplace);
if (!method_exists($client, $method)) {
return $this->fail(new \Exception("Method {$method} does not exist in " . get_class($client)));
}
try {
$result = $client->{$method}($parameters);
} catch (\Exception $exception)
{
echo $exception->getMessage().PHP_EOL;
return $this->release(static::THROTTLE_LIMIT);
}
return $result;
}
}
Работа
class Job extends BaseJob
{
CONST THROTTLE_LIMIT = 60;
CONST RETRY_DELAY = 10;
private $customer;
private $requestId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Customer $customer, $requestId = null)
{
$this->customer = $customer;
$this->requestId = $requestId;
echo "Updating Inventory for {$customer->name}\n";
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$marketplace = Marketplace::findOrFail(5);
if (!$report = $this->performActionOrThrottle('GetReport', $this->requestId, $this->customer, $marketplace)) {
echo "Report not available, trying again in " . self::RETRY_DELAY;
return $this->release(self::RETRY_DELAY);
}
...
handle Data
...
return;
}
}
Чтобы завершить работу, мне нужно вернуть метод handle(). Как я могу вернуть метод дескриптора из родительского метода, не проверяя возвращаемое значение и не реализовывая его? Если бы я хотел этого, нет смысла иметь этот родитель, который должен содержать всю логику, которая мне нужна для нескольких заданий.
createClient
и дросселя в каждой работе. - person mrvnklm   schedule 27.03.2019