RevolutionaryStuff.Azure
4.185.100
dotnet add package RevolutionaryStuff.Azure --version 4.185.100
NuGet\Install-Package RevolutionaryStuff.Azure -Version 4.185.100
<PackageReference Include="RevolutionaryStuff.Azure" Version="4.185.100" />
<PackageVersion Include="RevolutionaryStuff.Azure" Version="4.185.100" />
<PackageReference Include="RevolutionaryStuff.Azure" />
paket add RevolutionaryStuff.Azure --version 4.185.100
#r "nuget: RevolutionaryStuff.Azure, 4.185.100"
#:package RevolutionaryStuff.Azure@4.185.100
#addin nuget:?package=RevolutionaryStuff.Azure&version=4.185.100
#tool nuget:?package=RevolutionaryStuff.Azure&version=4.185.100
RevolutionaryStuff.Azure
Azure SDK integrations including Service Bus messaging, Key Vault, background services, and token credential helpers.
Service Bus message locks
ServiceBusBackgroundService uses the Azure SDK's ServiceBusProcessor in PeekLock mode. The SDK controls concurrency and automatically renews locks while message handlers run. The service completes successful messages, dead-letters permanent failures, and abandons other processing failures for retry. Graceful shutdown stops receiving and waits for active handlers before disposing the processor so renewal can continue during draining; handlers that never finish can delay shutdown.
Configure the consumer in ServiceBusWorkerConfig:
MaxMessageLockTimedefaults toTimeout.InfiniteTimeSpan("-00:00:00.001"in JSON), allowing automatic renewal for the lifetime of a handler. It controls the total renewal window, not the broker's individual lock duration. Remove any old explicit two-minute value, or set it to infinite, if processing can run longer. Per-execution values override the global setting. A finite value stops renewal after that window even if the handler is still running.MessagePrefetchdefaults to0. Leave it at zero for long-running or debugged handlers: prefetched messages are already locked while waiting locally, and their locks are not automatically renewed until processing starts. Remove old nonzero overrides where appropriate.ConcurrentExecutorsdefaults to1per execution per process. Increase it to process multiple messages concurrently; it is not a cross-process concurrency limit.MessageLockRenewalTimeoutandRenewalTimeare obsolete and ignored. Renewal timing is managed by the SDK rather than a custom timer.
Set Lock duration on the Azure Service Bus queue or topic subscription to 00:02:00 for approximately a one-to-two-minute crash-recovery window. This service does not change broker settings or require management permissions. After a crash, another consumer can receive the message after the last renewed lock expires; the remaining delay depends on when renewal last succeeded. Infinite automatic renewal does not create a permanent broker lock.
While a PeekLock remains valid, another consumer cannot receive that same queued message. This is not an absolute concurrency or exactly-once guarantee: network failures, service disruptions, or debugger pauses can prevent renewal and allow redelivery while the original handler is still running. Keep handlers idempotent; strict protection against overlapping side effects requires application-level coordination such as fencing enforced by the target data store. Separate topic subscriptions each receive their own copy and have independent locks.
When Visual Studio pauses all threads, lock renewal pauses too, but Azure's clock keeps running. For debugging, use an isolated queue/subscription and consider its maximum supported lock duration of five minutes; this also increases crash-recovery delay. No in-process renewal loop can keep a lock alive through an arbitrary all-thread pause. After a lock expires, it cannot be renewed or used to settle that delivery; MessageLockLost is reported rather than repaired by retrying the same lock.
What is Revolutionary Stuff
Revolutionary Stuff is a company I created a while back to work on creative ideas.
These libraries are a collection of utilities and tools I've created since .NET 1 Beta 2 (don't worry, there have been a few updates since then).
I use these is virtually all of the .NET projects I create to speed my development.
License Agreement
Somewhere deep in the GitHub repo and in the NuGet packages you'll find a license agreement. It's the MIT license. You can use this code in your projects, commercial or otherwise, with no restrictions.
I offer no warranties of any sort. But if you find a bug or want to request a change, post a message to the Issues.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Azure.Extensions.AspNetCore.Configuration.Secrets (>= 1.5.2)
- Azure.Identity (>= 1.21.0)
- Azure.Messaging.ServiceBus (>= 7.20.2)
- Azure.Security.KeyVault.Secrets (>= 4.11.1)
- RevolutionaryStuff.Core (>= 4.185.100)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on RevolutionaryStuff.Azure:
| Package | Downloads |
|---|---|
|
RevolutionaryStuff.Data.Cosmos
Package Description |
|
|
RevolutionaryStuff.Data.SqlAzure
Package Description |
|
|
RevolutionaryStuff.Storage.Providers.Azure.Blob
Package Description |
|
|
RevolutionaryStuff.Applets.WebhookReceiverHost
Package Description |
|
|
RevolutionaryStuff.Applets.Webhooked
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.185.100 | 81 | 9/16/2026 |
| 4.181.100 | 134 | 9/2/2026 |
| 4.178.100 | 170 | 8/27/2026 |
| 4.176.100 | 167 | 8/23/2026 |
| 4.174.100 | 156 | 8/12/2026 |
| 4.172.100 | 184 | 7/26/2026 |
| 4.170.100 | 174 | 7/19/2026 |
| 4.169.100 | 175 | 7/15/2026 |
| 4.168.100 | 179 | 7/13/2026 |
| 4.167.100 | 181 | 7/6/2026 |
| 4.165.100 | 194 | 6/24/2026 |
| 4.164.100 | 188 | 6/19/2026 |
| 4.163.100 | 207 | 6/11/2026 |
| 4.162.100 | 204 | 6/8/2026 |
| 4.161.100 | 211 | 6/1/2026 |
| 4.158.100 | 177 | 5/12/2026 |
| 4.157.100 | 199 | 5/8/2026 |
| 4.156.100 | 166 | 5/4/2026 |
| 4.155.100 | 175 | 5/3/2026 |
| 4.153.100 | 159 | 5/3/2026 |
This is now a .NET 9 library