编程语言
首页 > 编程语言> > php – 从Laravel Jobs返回数据

php – 从Laravel Jobs返回数据

作者:互联网

我正在为Laravel移动应用程序开发API.

方法将向其他API发出请求,组合和过滤数据,更改其结构等.

应用程序的要求之一是响应时间不超过30秒,或者根本不响应.所以,我必须尽可能多地重复请求.我试图通过Laravel Queues实现这一点,并且目前在我的Job类中有类似的东西:

private $apiActionName;

public function __construct($apiActionName)
{
    $this->apiActionName = $apiActionName;
}

public function handle(SomeService $someService)
{
    return $someService->{$this->apiActionName}();
}

而这个动作代码在控制器中:

public function someAction()
{ 
    $data = $this->dispatch(new MyJob($apiActionName));
    return response()->json($data);
}

是的,我知道从工作中返回价值是不错的主意,但我希望这是可能的.但是$this-> dispatch()只返回排队的作业ID,而不是handle方法的结果.

TL; DR:如何从排队的作业中返回数据,而不将其保存在任何地方,即使它在队列中有多次尝试?如果乔布斯不适合这个,也许有人知道其他方法.任何建议将被认真考虑.

提前致谢!

解决方法:

您正在Job类中返回数据,但是将$data分配给调度程序 – 请注意,dispatch()方法不是Job类的一部分.

假设您的作业同步运行,您可以尝试这样的事情:

private $apiActionName;
private $response;

public function __construct($apiActionName)
{
    $this->apiActionName = $apiActionName;
}

public function handle(SomeService $someService)
{
    $this->response = $someService->{$this->apiActionName}();
}

public function getResponse()
{
    return $this->response;
}

然后在你的控制器中:

public function someAction()
{ 
    $job = new MyJob($apiActionName);
    $data = $this->dispatch($job);
    return response()->json($job->getResponse());
}

显然,一旦你转向异步模式和队列,这将无法工作 – 当你调用getResponse()时,响应将不会出现.但那是异步工作的全部目的:)

标签:php,laravel,api-design,task-queue
来源: https://codeday.me/bug/20190608/1200287.html