コード例 #1
0
 public function getRetryRaw($url, array $headers = [], $tries = 3, array $status = null, $delay = null, array $customChain = null)
 {
     $status = $status ?: [500, 503];
     $retry = new Retry(['filter' => Retry::createChainFilter($customChain ?: [Retry::createIdempotentFilter(), Retry::createCurlFilter(), Retry::createStatusFilter($status)]), 'max' => $tries, 'delay' => function ($retries, AbstractTransferEvent $e) use($delay) {
         info('Delaying...');
         return $delay ?: (int) pow(2, $retries - 1);
     }]);
     $client = new HttpClient();
     $client->getEmitter()->attach($retry);
     return $client->get($url, ['headers' => $headers]);
 }
コード例 #2
0
 /**
  * {@inheritDoc}
  */
 public function registerSubscribers(EventDispatcherInterface $eventDispatcher)
 {
     $filter = RetrySubscriber::createChainFilter([RetrySubscriber::createIdempotentFilter(), RetrySubscriber::createStatusFilter([429, 500, 503])]);
     $retry = new RetrySubscriber(['filter' => $filter, 'delay' => function ($number, $event) {
         /** @var \GuzzleHttp\Message\Response $response */
         if (null !== $event->getResponse() && $event->getResponse()->getStatusCode() === 429) {
             // Adding 20% of the waiting time as it seems to be the best result without getting two blocking reqs.
             $sleep = (int) $event->getResponse()->getHeader('retry-after') * 1.2;
             if ($sleep >= 0) {
                 return $sleep * 1000;
             }
         }
         return 0;
     }, 'max' => 3]);
     $this->client->getEmitter()->attach($retry);
 }
コード例 #3
0
 public function testCreatesIdempotentFilter()
 {
     $u = 'http://foo.com';
     $f = RetrySubscriber::createIdempotentFilter();
     $e = $this->createEvent(new Response(500), new Request('GET', $u));
     $this->assertFalse($f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('PUT', $u));
     $this->assertFalse($f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('DELETE', $u));
     $this->assertFalse($f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('HEAD', $u));
     $this->assertFalse($f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('OPTIONS', $u));
     $this->assertFalse($f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('POST', $u));
     $this->assertSame(-1, $f(1, $e));
     $e = $this->createEvent(new Response(500), new Request('PATCH', $u));
     $this->assertSame(-1, $f(1, $e));
 }
コード例 #4
0
 /**
  * Get the retry subscriber.
  *
  * @return \GuzzleHttp\Subscriber\Retry\RetrySubscriber
  */
 protected function getRetrySubscriber()
 {
     $filter = RetrySubscriber::createChainFilter([RetrySubscriber::createIdempotentFilter(), RetrySubscriber::createStatusFilter()]);
     return new RetrySubscriber(['filter' => $filter]);
 }