Backpressure
Your .NET service reads messages off an Azure Service Bus queue and processes each one in memory before acknowledging it.
A sudden surge hits, and messages arrive faster than the service can process them. It keeps pulling more messages into memory to keep up, until it runs out of memory and crashes, losing everything it had already pulled but not yet processed.
A service that keeps accepting more work than it can finish doesn't avoid a crash, it just delays one and makes it worse. That's exactly what backpressure prevents.
Backpressure caps what the service pulls in before it's ready: limit how many messages it pulls ahead of actually processing them, instead of pulling as many as are available. Once that limit is reached, let new messages wait on Azure Service Bus itself rather than piling up in the service's own memory, so the service can fall behind safely during a surge and catch up afterward, instead of crashing and losing what it had already pulled.
Use: Azure Service Bus (PrefetchCount), System.Threading.Channels
A service that's falling behind should say so, not quietly keep accepting work it can't finish.
Pour water into a funnel faster than it can drain out the bottom, and it backs up and overflows the top.
Slow the pour to match how fast the funnel actually drains, and none of it overflows, it just takes a little longer to get it all through.
A queue with no limit is a funnel nobody ever slows down for. The hand that slows the pour is what fixes it.