Setting a thirty-second timeout feels responsible and does nothing about the number of workers waiting simultaneously, which is what actually takes a site down.
// 50 workers ÷ 20s upstream = 2.5 req/s before exhaustion.
// the timeout does not appear in that arithmetic.
// what helps, in order:
// 1. a realistic timeout — 3s, because no user waits 30
// 2. a separate connect timeout — 1s
// 3. a cap on concurrent calls to that dependency
$this->http->timeout(3)->connectTimeout(1)->get($url);
Dropping the timeout from thirty seconds to three usually does more than any circuit breaker, because thirty was never a real number — no user waits that long and the only thing it bought was a worker held for half a minute. The separate connect timeout matters because an unreachable host should fail in a second rather than at the full read timeout. Both together turn a hung dependency into a fast error.