<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pixelfederation / circuit-breaker-bundle example snippets
// in config/bundles.php add this line:
PixelFederation\CircuitBreakerBundle\Bridge\Symfony\PixelFederationCircuitBreakerBundle::class
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreakerService;
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreaker;
/**
* @CircuitBreakerService(
* defaultFallback="makeDefaultFallbackRequest",
* ignoreExceptions={BadMethodCallException::class}
* )
*/
class Service {
/**
* @CircuitBreaker()
*/
public function iShouldBeCircuitBroken(): int
{
return 0;
}
}
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreakerService;
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreaker;
#[CircuitBreakerService(defaultFallback: 'makeDefaultFallbackRequest', ignoreExceptions: [BadMethodCallException::class])]
class Service {
#[CircuitBreaker()]
public function iShouldBeCircuitBroken(): int
{
return 0;
}
}
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreaker;
class Service {
/**
* @CircuitBreaker(fallbackMethod="makeSpecialFallbackRequest")
*/
public function iShouldBeCircuitBroken(): int
{
return 0;
}
}
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreaker;
class Service {
#[CircuitBreaker(fallbackMethod: 'makeSpecialFallbackRequest')]
public function iShouldBeCircuitBroken(): int
{
return 0;
}
}
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreaker;
use PixelFederation\CircuitBreakerBundle\Annotation\CircuitBreakerService;
use PixelFederation\CircuitBreakerBundle\CircuitBrokenService;
use BadMethodCallException;
use InvalidArgumentException;
use RuntimeException;
/**
* The class level annotation activates circuit breaking configuration on methods
* marked with the @CircuitBreaker annotation.
* In this case, also the default fallback for each circuit broken method is configured
* (the 'makeDefaultFallbackRequest' method)
*
* The ignoreExceptions option sets exceptions, on which occurrence the service won't be marked
* as failing, e.g. some app/system level exceptions, which don't need to have to do anything
* with http requests under the hood.
*
* @CircuitBreakerService(
* defaultFallback="makeDefaultFallbackRequest",
* ignoreExceptions={BadMethodCallException::class}
* )
*/
class TestService implements CircuitBrokenService
{
private SomeHttpClient $client;
public function __construct(SomeHttpClient $client)
{
$this->client = $client;
}
/**
* This method is marked to be circuit-broken. It uses the class level configured fallback
* and ignores the class level configured exceptions.
*
* @CircuitBreaker()
*/
public function makeRequest(): int
{
return $this->client->makeRequest(); // it is important to set http timeouts here
}
/**
* This method is marked to be circuit-broken. It uses a different fallback, not the one
* configured on class level.
*
* @CircuitBreaker(fallbackMethod="makeSpecialFallbackRequest")
*/
public function makeRequestWithCustomCircuitBreaker(string $param): int
{
return $this->client->makeAnotherRequest($param); // it is important to set http timeouts here
}
public function makeDefaultFallbackRequest(): void
{
return 1; // ideally there is no call to any external dependency in the fallback method
}
// notice that this fallback method has the same method signature as the method makeRequestWithCustomCircuitBreaker
public function makeSpecialFallbackRequest(string $param): void
{
return 0; // ideally there is no call to any external dependency in the fallback method
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.