Repository navigation
3.1: roadmap from #51 — processor features, poison-queue replay, telemetry, AOT, Blob and health-check packages - #52
Merged
Merged
Conversation
…g, middleware, dead-letter queue
Two IHealthChecksBuilder extensions: - AddAzureStorageQueueProcessors: reads IQueueProcessorController.GetStatus() (no storage calls). Unhealthy after N consecutive receive failures, Degraded when paused, stopping, or a handler exceeds MaxHandlerAge. - AddAzureStorageQueue: reads queue properties (billable call), optionally the poison queue count; per-run timeout (10 s default). Not yet added to the .sln, so CI and nuget.yml do not build or pack it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rage New package implementing ILargeMessageStore over a BlobContainerClient (claim-check for messages over 64 KiB), with UseBlobStorageForLargeMessages builder extensions (container instance, factory, or container name derived from the queue client's own account and credentials). Download and delete only accept blobs inside the store's own container; references never carry a SAS token. Tests: reference refusal and endpoint derivation (no IO), plus end-to-end completion and dead-letter runs against Azurite blob storage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jasonshave
enabled auto-merge (squash)
October 16, 2026 20:47
This was referenced Oct 16, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the 3.1 roadmap in #51: the four fix-before-3.1 items, every quick win, and every bigger feature, including two new packages. Not included: the "4.0 candidates" (breaking changes) and the items #51 lists as considered and skipped. Nothing is released by merging this; tagging
v3.1.0stays a separate step after validation.What changes for someone using the library
Fixed before 3.1 ships
PoisonTimeToLivesets an expiry if wanted.New
DeadLetterOn<T>(),OnHandlerError); pause/resume and status (IQueueProcessorController); a rate limiter;MaxRenewalDurationand a long-running-handler warning;QueueName,HeadersandIsLastAttempton each message; processor options from configuration.Delay, gzip compression, and a clear error before sending anything the service would reject (over 64 KiB, or a delay the message would expire within).IDeadLetterQueueshows why each message was dead-lettered and replays them (optionally filtered).UseStorageAccount(...)so clients only name their queue (the shape Aspire hands an app); an account endpoint plusQueueNameis accepted; injecting an unregistered client says which clients exist.ReadAllAsyncreplaces the hand-written polling loop.AzureStorage.QueueService.Blobs(messages over 64 KiB, kept in Blob storage) andAzureStorage.QueueService.HealthChecks. Both are in the solution, sonuget.ymlpacks and publishes them with the core at the same version.Decisions for you to check
ReplayAsyncstrips it.IConfigurationis marked not trim-safe. The source-generated binder can't fillClientOptions, so using it would silently drop"MessageEncoding": "Base64"from config. Processor options use the generator.Timeout(10 s) on the queue check that the issue didn't ask for, so an unreachable account can't hold a probe open for minutes.The full list of behaviour changes is in the README under "Upgrading from 3.0 to 3.1".
Tests and CI
198 tests, all passing locally in about 3 s across four test assemblies, and stable across three runs. Two new test projects come with the packages. No test waits on real time. CI now also maps Azurite's blob port (10000), which the Blob package's two end-to-end tests need.
🤖 Generated with Claude Code