【发布时间】:2016-09-16 22:50:32
【问题描述】:
我正在 Laravel 上为移动应用开发 API。
方法将向其他 API 发出请求,合并和过滤数据,更改其结构等。
对应用的要求之一是响应时间不超过 30 秒,或者根本不响应。所以,我必须尽可能多地重复请求。我试图通过 Laravel 队列来实现这一点,并且目前在我的 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:我怎样才能从排队的作业中返回数据,而不将其保存在任何地方,即使它在队列中有多次尝试?如果乔布斯不适合这个,也许有人知道其他方法。任何建议将不胜感激。
提前致谢!
【问题讨论】:
-
如果你想异步处理,我构建了这个github.com/williamjulianvicary/laravel-job-response,它将使用缓存层将响应传输回你的原始任务(并阻塞直到它准备好)。
标签: php laravel api-design task-queue