Skip to content

Wolverine 6.52.0

Choose a tag to compare

@jeremydmiller jeremydmiller released this 23 Oct 22:25
7a916c6

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 / MySqlDataSource from the container, named static tenants, a Named Connection Strings table in describe, 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 through IRecurringScheduleControl (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.ClassicCombineIntoOneLogicalHandler is [Obsolete] (still the default), a startup warning for combined handlers, opt-in AssertNoCombinedHandlers(), fixes for latent Separated bugs, a handler.type OpenTelemetry tag on every chain, and logical deduplication scoped per chain (GH-5133) by @jeremydmiller in #5184

HTTP

Operability and diagnostics

  • ServiceCapabilities reads each store on its own and reports FailedSections, so a failed section is distinguishable from an empty one (GH-5162) by @jeremydmiller in #5175
  • AssignmentGrid.Agent.UnplacedReason (AwaitingCapacity, NoCapableNode, Paused, TakeoverHold, Superseded), a capacity log line and an optional NodeAcceptThreshold (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-patch discover the Oracle message store (GH-5172) by @jeremydmiller in #5177

Documentation

Full Changelog: V6.51.3...V6.52.0