gpt4 book ai didi

php - 从 Laravel 作业返回数据

转载 作者:可可西里 更新时间:2023-10-31 22:52:14 25 4
gpt4 key购买 nike

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

方法将向其他 API 发出请求、合并和过滤数据、更改其结构等。

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

private $apiActionName;

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

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

Controller 中的这个 Action 代码:

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

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

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

提前致谢!

最佳答案

您在 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;
}

然后在你的 Controller 中:

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

显然,一旦您转到异步模式和队列,这将不起作用 - 到您调用 getResponse() 时响应还不会出现。但这就是异步作业的全部目的:)

关于php - 从 Laravel 作业返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com