Repository navigation
Wolverine 6.52.0
Wolverine 6.52.0 is a feature release. The headline items are Aspire-style registration by connection-string name for every transport and every message store, timer agents for short-cadence recurring schedules, and the 6.x groundwork for Wolverine 7.0's one-chain-per-handler model. There are no breaking API changes. Two behavior changes are worth knowing about up front: recurring schedules that fire more often than every 15 minutes now run on a timer agent (opt out per schedule with UseScheduledMessages()), and outgoing envelopes a transport cannot map are dead-lettered instead of being logged and deleted.
Many thanks to everyone who reported issues and sent fixes: @uniquelau, @johnkaram02, @erdtsieck, @ahmetvayhan and @pritamrao.
Aspire parity: named connections
- Named-connection overloads for every transport (Aspire parity, GH-5126) by @jeremydmiller in #5159
- Message storage by connection-string name for every RDBMS provider (PostgreSQL, SQL Server, MySQL, SQLite, Oracle),
NpgsqlDataSource/MySqlDataSourcefrom the container, named static tenants, a Named Connection Strings table indescribe, and docs that lead with the named form (GH-5127, GH-5156) by @jeremydmiller in #5174 - Aspire samples moved to Aspire 13.6.3, added to
wolverine.slnx, with a ServiceDefaults project for traces, metrics and/health(GH-5124) by @jeremydmiller in #5182
Messaging and error handling
- Timer agents for short-cadence recurring schedules: one agent per schedule under
opts.Schedules.TimerThreshold(15 minutes), same dedup id as the scheduled path, pause and resume throughIRecurringScheduleControl(GH-5168) by @jeremydmiller in #5183 DoThenRetry(action, maxAttempts)error policy that works both inline and from a queue (GH-5068) by @jeremydmiller in #5179- Unmappable outgoing envelopes are dead-lettered on Azure Service Bus, SNS and Kafka instead of being reported as sent (GH-5055) by @jeremydmiller in #5185
- Durable outbox coalesces stores and deletes per tenant database, so one slow tenant no longer holds back every tenant's sends (GH-5171) by @jeremydmiller in #5180
- 6.x prep for HandlerChain 1:1 in 7.0:
MultipleHandlerBehavior.ClassicCombineIntoOneLogicalHandleris[Obsolete](still the default), a startup warning for combined handlers, opt-inAssertNoCombinedHandlers(), fixes for latentSeparatedbugs, ahandler.typeOpenTelemetry tag on every chain, and logical deduplication scoped per chain (GH-5133) by @jeremydmiller in #5184
HTTP
[DeduplicatedWithResponse]ClaimInTransaction, plus two Marten commit-failure fixes (GH-5160, GH-5165, GH-5166) by @jeremydmiller with @uniquelau in #5169WolverineHttpOptions.DefaultClaimInTransaction, an application-wide default (GH-5160) by @jeremydmiller in #5173- A string response declares its UTF-8 byte count as
Content-Length(GH-5187) by @johnkaram02 in #5188 - Bind array and list query parameters whose
[FromQuery]name is not a C# identifier (GH-5189) by @johnkaram02 in #5190
Operability and diagnostics
ServiceCapabilitiesreads each store on its own and reportsFailedSections, so a failed section is distinguishable from an empty one (GH-5162) by @jeremydmiller in #5175AssignmentGrid.Agent.UnplacedReason(AwaitingCapacity,NoCapableNode,Paused,TakeoverHold,Superseded), a capacity log line and an optionalNodeAcceptThreshold(GH-5163) by @jeremydmiller in #5176 and #5186- Header-equality filter on
DeadLetterEnvelopeQuery, honored by bulk replay and discard, across every dead letter store (GH-5164) by @jeremydmiller in #5181 db-list/db-dump/db-patchdiscover the Oracle message store (GH-5172) by @jeremydmiller in #5177
Documentation
- The remaining serverless and Cosmos DB documentation (GH-5054) by @jeremydmiller in #5178
- Memory sizing for managed event subscription distribution at tenants x projections scale: set
MaximumHopperSizeto about 2 xBatchSize(GH-5170, follow-up JasperFx/jasperfx#1076) by @jeremydmiller in #5199
Full Changelog: V6.51.3...V6.52.0