日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用Guzzle拓展包請求接口失敗重試

作者:渡目成書 更新時間: 2022-01-26 編程語言
  • 問題在接口不穩定的情況下,可能出現訪問接口錯誤情況,一般又在第二次請求又會成功。這種時候需要我們完成一個重試的策略去進行規避
  • 解決:使用guzzle中間的重試去解決
<?php
require './vendor/autoload.php';

class Retry
{
    const MAX_RETRIES = 2;
    public $client;

    public function __construct()
    {
        $handlerStack = \GuzzleHttp\HandlerStack::create(new  \GuzzleHttp\Handler\CurlHandler());
        $handlerStack->push(\GuzzleHttp\Middleware::retry($this->retryDecider(), $this->retryDelay()));
        $this->client = new \GuzzleHttp\Client(['handler' => $handlerStack]);
    }

    public function retryDecider()
    {
        return function (
            $retries,
            \GuzzleHttp\Psr7\Request $request,
            \GuzzleHttp\Psr7\Response $response = null,
            \GuzzleHttp\Exception\RequestException $exception = null
        ) {
            if ($retries >= self::MAX_RETRIES) {
                var_dump('次數'.$retries);//查看
                return false;
            }
            if ($exception instanceof \GuzzleHttp\Exception\ConnectException) {
                return true;
            }

            if ($response) {
                // 如果請求有響應,但是狀態碼大于等于500,繼續重試(這里根據自己的業務而定)
                if ($response->getStatusCode() >= 200) {
                    return true;
                }
            }

            return false;
        };
    }

    protected function retryDelay()
    {
        return function ($numberOfRetries) {
            return 1000 * $numberOfRetries;
        };
    }
}


class PostHttp
{
    public function aa()
    {
        $retry = new Retry();

        return $retry->client->request('GET', 'http://boot.test/api/test');
    }
}

$obj = new PostHttp();

$t = $obj->aa();

var_dump($t);
  • 設置訪問接口返回200進行重試2次,結果重試2次達到了效果
    在這里插入圖片描述

原文鏈接:https://blog.csdn.net/weixin_43674113/article/details/121378995

欄目分類
最近更新