Generates Bulkhead pattern for PHP 8.4. Creates resource isolation with semaphore-based concurrency limiting and thread pool isolation. Includes unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates Bulkhead pattern infrastructure for resource isolation and fault containment.
| Scenario | Example |
|---|---|
| External API calls | Limit concurrent requests to payment gateway |
| Database connections | Pool size limiting |
| CPU-intensive work | Limit by CPU cores |
| Multi-instance | Redis-based coordination |
Path: src/Infrastructure/Resilience/Bulkhead/
BulkheadInterface.php — Common interfaceBulkheadConfig.php — Configuration value objectBulkheadFullException.php — Exception with capacity infoChoose based on use case:
SemaphoreBulkhead.php — Local semaphore-based limitingDistributedSemaphoreBulkhead.php — Redis-based for multi-instanceBulkheadRegistry.php — Manages multiple bulkheadsSemaphoreBulkheadTest.php — Bulkhead behavior testsBulkheadConfigTest.php — Configuration tests| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Resilience/Bulkhead/ |
| Unit Tests | tests/Unit/Infrastructure/Resilience/Bulkhead/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | BulkheadInterface | BulkheadInterface |
| Semaphore | SemaphoreBulkhead | SemaphoreBulkhead |
| Distributed | DistributedSemaphoreBulkhead | DistributedSemaphoreBulkhead |
| Config | BulkheadConfig | BulkheadConfig |
| Registry | BulkheadRegistry | BulkheadRegistry |
| Exception | BulkheadFullException | BulkheadFullException |
| Test | {ClassName}Test | SemaphoreBulkheadTest |
interface BulkheadInterface
{
public function execute(callable $operation): mixed;
public function tryAcquire(): bool;
public function release(): void;
public function getAvailablePermits(): int;
public function getActiveCount(): int;
public function getName(): string;
}
final readonly class BulkheadConfig
{
public function __construct(
public int $maxConcurrentCalls = 10,
public int $maxWaitDuration = 0,
public bool $fairness = true
) {}
public static function default(): self;
public static function forCpuBound(int $cpuCores): self;
public static function forIoBound(int $cpuCores): self;
public static function forExternalService(int $maxConnections): self;
}
// Create limiter
$bulkhead = new SemaphoreBulkhead(
name: 'payment-gateway',
config: BulkheadConfig::forExternalService(maxConnections: 20),
logger: $logger
);
// Execute with isolation
try {
$result = $bulkhead->execute(fn() => $client->charge($request));
} catch (BulkheadFullException $e) {
return Result::serviceOverloaded();
}
| Use Case | Bulkhead Type | Config |
|---|---|---|
| External API calls | Semaphore | Limited by API rate limits |
| Database connections | Semaphore | Limited by pool size |
| CPU-intensive work | Semaphore | Limited by CPU cores |
| Multi-instance | Distributed | Redis-based coordination |
| Mixed workloads | Registry | Per-service configuration |
| Anti-pattern | Problem | Solution |
|---|---|---|
| Global Bulkhead | Single point of contention | Per-service bulkheads |
| No Release | Permit leak | Always release in finally |
| Wrong Size | Too small = rejected, too large = no protection | Right-size per service |
| No Metrics | Can't monitor usage | Track acquired/rejected |
| Infinite Wait | Thread starvation | Set maxWaitDuration |
| No Fallback | Hard failure on full | Provide degraded response |
For complete PHP templates and examples, see:
references/templates.md — BulkheadInterface, Config, SemaphoreBulkhead, DistributedSemaphoreBulkhead, Registryreferences/examples.md — PaymentGatewayAdapter, ConnectionPool, OrderService examples and testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.