J.A*_*ams 5 php scheduler laravel
我有 3 个函数可以从外部 apis 获取 json 数据,然后保存在我的数据库中。每个函数都在自己的类中,例如:
Class api1 {
public function fetch()
{
//Do Something
}
}
Class api2 {
public function fetch()
{
//Do Something
}
}
Run Code Online (Sandbox Code Playgroud)
由于其 api 调用可能需要一些时间或延迟。我想并行运行所有 3 个,以便 api2 不必等待 api1 完成。
有什么办法吗?
* 注意:我还将使用 Laravel 调度程序,它将每分钟运行每个函数或运行包含所有 3 个函数的单个函数。
对我来说,这看起来更像是数据的回调请求,因此为了防止您的应用程序变慢,这应该是一项后台工作。
但在此之前,我将为这些类实现一个接口:
interface apiService{
public function fetch();
}
Class api1 implements apiService {
public function fetch()
{
//Do Something
}
}
Class api2 implements apiService{
public function fetch()
{
//Do Something
}
}
Run Code Online (Sandbox Code Playgroud)
创建工作类别php artisan make:job dataFetcher
职位结构将根据App\Jobs\
Laravel 中的作业类非常简单,由一个构造函数组成,用于注入依赖项并handle()触发作业。
protected $service;
public function __construct(apiService $service)
{
$this->service = $service;
}
public function handle()
{
$this->apiService->fetch();
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里使用更高级的代码注入接口而不是具体类。因此,现在您可以创建一个命令来使用 cron 作业触发调用,或者您可以创建一个自定义服务提供程序以在应用程序引导时立即触发命令。
我会在这里使用自定义 artisan 命令:
所以只需在处理方法上创建一个自定义 artisan命令
public function handle()
{
Job::dispatch(new FirstApiClass);
Job::dispatch(new SecondApiClass);
}
Run Code Online (Sandbox Code Playgroud)
Handle 方法将执行第一行,作业将在后台处理(作业是否失败并不重要),然后下一个调用将被触发,依此类推...
请注意本例中接口的使用,Job 类并不真正关心您正在调用哪个服务,只要您提供它的实现即可。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |