'queue/mail', 'report' => 'queue/report' ]; /** * Execute the console command. * * @return mixed */ public function handle() { $type = $this->argument('type'); if (!in_array($type, ['email', 'report'])) { $this->error('参数必须为email 或 report'); return; } $taskUrls = Site::query()->whereIn('status', [2, 3, 5, 6, 8, 9])->get()->pluck('api_url')->filter()->toArray(); // $http = new Client([ // 'verify' => false, // 'timeout' => 60 // ]); // $taskUrls->each(function ($item) use ($http, $type) { // // try { // $http->get(sprintf('%s%s', $item, self::URL_MAP[$type])); // } catch (\Throwable $throwable) { // Log::notice(var_export($throwable->getMessage(), 1)); // } // }); $client = new Client([ 'verify' => false, 'timeout' => 25 ]); //并发请求链接地址 $requests = function () use ($client, $taskUrls, $type) { foreach ($taskUrls as $item) { if (empty($item)) continue; yield new \GuzzleHttp\Psr7\Request('GET', $item . self::URL_MAP[$type]); } }; $pool = new Pool($client, $requests(), [ 'concurrency' => 10, //同时并发抓取几个 'fulfilled' => function (Response $response, $index) { }, 'rejected' => function (\Throwable $throwable, $index) { // $this->error($index . var_export($throwable->getMessage(), 1)); Log::error(var_export($throwable->getMessage(), 1)); }, ]); $promise = $pool->promise(); $promise->wait(); $this->info('done'); return; } }