Start here. This is the direct spoken answer to practice first.
Why this question matters
Bulkhead isolation reserves failure boundaries inside a service so one slow provider, expensive feature, or noisy tenant cannot consume every shared resource.
I would put a concurrency limit around calls to the risky dependency and keep any waiting queue bounded. When the limit and queue are full, new work should fail quickly, be delayed durably, or use a defined fallback instead of waiting without bound. The limit protects request capacity and the downstream service. I would also partition work where necessary, for example per dependency, endpoint class, tenant tier, or background workload, so one hot path cannot starve unrelated critical traffic.