Repository navigation
Releases
v13.0.5
Foundatio v13.0.5
Feature and maintenance release building on v13.0.4.
Highlights
- Queue
GroupId— a provider-neutral tenant/group key for queue entries, with support for SQS fair queues and FIFO, and Azure Service Bus sessions - Configurable hosted job startup timeout — new
StartupActionsTimeoutoption for jobs that wait for startup actions - Dependency updates across OpenTelemetry, MessagePack, Polly, Microsoft.Extensions, and xUnit
- Documentation improvements for SQS, Service Bus, and local AWS emulation
Queues: GroupId (#579)
- Added
QueueEntryOptions.GroupIdandIQueueEntry.GroupIdso a message can carry a tenant or group key through any queue implementation - Added
SharedQueueOptions.GroupIdResolver(and aGroupId(Func<T, string?>)builder method) to derive the group id from the message payload. An explicitGroupIdon the entry options overrides the resolver - An empty
GroupIdis normalized tonull, so anEnqueuinghandler can no longer hand a provider an empty group id EnqueueAsyncnow copies the caller'sQueueEntryOptionsbefore applying the resolver and trace context, so reusing an options instance no longer carries the previous message'sCorrelationId/TraceStateand handler edits no longer leak back to the callerGroupIdis preserved across abandon and retry, including delayed retries- Added shared
QueueTestBasetests so every provider is verified against the sameGroupIdbehavior
Note:
GroupIdis carried by the core abstractions. Whether it changes delivery behavior depends on the provider package. Upgrade the provider (SQS, Azure Service Bus, Redis, Azure Storage) to a release that supports it. Providers that don't supportGroupIdignore it.
Hosting: Configurable Startup Timeout (#569)
- Added
HostedJobOptions.StartupActionsTimeoutand the matchingStartupActionsTimeout(TimeSpan?)builder method for jobs registered withAddJob - Applies when
WaitForStartupActionsis enabled. When unset, the default remains five minutes - Nonpositive durations time out immediately; infinite waits are not supported
services.AddJob<CleanupJob>(o => o
.WaitForStartupActions()
.StartupActionsTimeout(TimeSpan.FromMinutes(15)));Documentation
- Clarified SQS FIFO deduplication id selection, the queue deletion window,
ContentBasedDeduplicationbeing read once per queue, and dead-letter encryption, limits, and at-least-once behavior - Documented Service Bus session abandon ordering and delayed retries on duplicate-detection queues
- Referenced Floci instead of LocalStack for local AWS emulation (#576)
- Clarified
JobResultretry vs. permanent failure semantics for queue jobs versus standalone jobs - Removed Minio references from the docs and README (repository archived)
Build & CI
- CI package publishing is limited to
mainand version tags, and branch nightlies are published so provider PRs can consume a matching build - The Feedz publish feed is now configurable in the build workflow
- Removed the explicit
Microsoft.SourceLink.GitHubpackage reference MinVer7.0.0 → 8.0.0
Dependency Updates
- OpenTelemetry exporter/hosting: 1.18.0 → 1.19.1; instrumentation (AspNetCore, Http, Runtime): 1.18.0 → 1.19.0
MessagePack: 3.1.8 → 3.1.12Polly: 8.7.0 → 8.8.0Microsoft.AspNetCore.DataProtection: 8.0.30 → 8.0.32Microsoft.Extensions.Configuration.*/Microsoft.AspNetCore.TestHost: 10.0.11 → 10.0.13Microsoft.Extensions.TimeProvider.Testing: 10.9.0 → 10.11.0- xUnit v4:
xunit.v3.mtp-v2/xunit.v3.assert/xunit.v3.extensibility.core4.0.0 → 4.0.2,xunit.runner.visualstudio4.0.0 → 4.0.1 Microsoft.NET.Test.Sdk: 18.9.0 → 18.11.0Moq: 4.20.72 → 4.21.0 (tests)Aspire.Hosting.Redis(sample): 13.5.3 → 13.6.1- Docs tooling:
js-yaml4.3.1 → 4.3.2 (#562)
Note for consumers: If you reference
Foundatio.TestHarness,Foundatio.Xunit.v3, or other Foundatio test packages, keep them aligned with your xUnit packages (4.0.x).
Packages
This release publishes the usual Foundatio packages, including:
FoundatioFoundatio.Extensions.HostingFoundatio.TestHarnessFoundatio.Xunit.v3Foundatio.MessagePackFoundatio.DataProtection
Install via NuGet:
dotnet add package Foundatio --version 13.0.5Full Changelog
v13.0.4
Foundatio v13.0.4
Maintenance and documentation release building on v13.0.2.
Highlights
- xUnit v4 support in
Foundatio.Xunit.v3and the test harness packages - Redis documentation improvements for connection lifetime, graceful shutdown, and Pub/Sub timeout behavior
- Dependency updates across OpenTelemetry, ASP.NET Core, MessagePack, and Microsoft.Extensions
- Security fix — pinned
System.Security.Cryptography.Xmlto 8.0.4 to resolve transitive vulnerability advisories - Expanded cache test coverage for
RemoveIfEqualAsync/ReplaceIfEqualAsyncwhen keys do not exist
Documentation
- Clarified recommended Redis
IConnectionMultiplexerregistration patterns in DI (factory-owned instances vs. pre-built singletons that are never disposed) - Added Connection Lifetime & Graceful Shutdown guidance for Redis, including app-side disposal and server-side timeout/keepalive considerations
- Updated Redis Pub/Sub timeout behavior documentation
- Improved dependency injection and getting-started examples
Testing
- Upgraded test projects to xUnit v4 (
xunit.v3.mtp-v24.0.0,xunit.runner.visualstudio4.0.0) - Updated
Foundatio.Xunit.v3retry test execution to align with xUnit v4 APIs - Added test coverage ensuring
RemoveIfEqualAsyncandReplaceIfEqualAsyncreturnfalseand do not create keys when the target key does not exist
Note for consumers: If you reference
Foundatio.TestHarness,Foundatio.Xunit.v3, or other Foundatio test packages, upgrade them together with your xUnit packages to 4.0.0 to avoid test discovery/runtime mismatches.
Dependency Updates
- OpenTelemetry packages: 1.16.x / 1.15.x → 1.18.0
Microsoft.AspNetCore.DataProtection: 8.0.28 → 8.0.30MessagePack: 3.1.7 → 3.1.8Microsoft.Extensions.*/Microsoft.AspNetCore.TestHost: 10.0.11Microsoft.NET.Test.Sdk: 18.7.0 → 18.9.0Aspire.Hosting.Redis(sample): 13.4.6 → 13.5.3
Packages
This release publishes the usual Foundatio packages, including:
FoundatioFoundatio.Extensions.HostingFoundatio.TestHarnessFoundatio.Xunit.v3Foundatio.MessagePackFoundatio.DataProtection
Install via NuGet:
dotnet add package Foundatio --version 13.0.4Full Changelog
v13.0.2
What's Changed
- chore(deps): bump uuid and mermaid in /docs by @dependabot[bot] in #513
- fix: correct disposal ordering to prevent ObjectDisposedException during shutdown by @niemyjski in #519
- Bump Microsoft.SourceLink.GitHub from 10.0.203 to 10.0.300 by @dependabot[bot] in #520
- perf: change IMessage.Data from byte[] to ReadOnlyMemory by @niemyjski in #530
- chore(deps-dev): bump dompurify from 3.4.0 to 3.4.11 in /docs by @dependabot[bot] in #529
- chore(deps-dev): bump markdown-it from 14.1.0 to 14.2.0 in /docs by @dependabot[bot] in #521
- chore(deps): bump esbuild and vite in /docs by @dependabot[bot] in #531
Full Changelog: v13.0.1...v13.0.2
v13.0.1
v13.0.1
This is a major release with 368 files changed across the entire Foundatio codebase. Here are the themes that define v13:
- Reliability & Correctness: Dozens of race conditions, deadlocks, and disposal issues have been hunted down and fixed across queues, messaging, caching, and timers. Cancellation tokens are now properly linked to disposal for clean shutdown, and poison messages are gracefully handled instead of crashing consumers.
- Consistent Error Handling: Every subsystem now has its own exception type (
QueueException,MessageBusException,SerializerException) so consumers get predictable, catchable errors regardless of the underlying provider. These feature-specific exceptions are automatically excluded from resilience policy retries. - API Normalization: Cache TTL behavior, serializer validation, and expiration return values have been normalized across all implementations -- no more provider-specific quirks.
- Null Safety: A comprehensive NRT audit eliminated
null!suppressions across the codebase, fixing latent null bugs and adding proper nullable attributes. The API surface now accurately communicates nullability contracts. - Modern .NET: Dropped
netstandard2.0in favor ofnet8.0+net10.0. Replaced DeepCloner with the actively-maintained FastCloner.ScheduledTimernow usesTimeProviderfor testability. - Documentation Overhaul: Foundatio now has a dedicated documentation site with comprehensive guides, source code links, and real-world examples for every subsystem.
Documentation Site
Foundatio v13 ships with a brand-new documentation site covering every subsystem with guides, configuration examples, and direct source code links. Key additions:
- New docs site built with VitePress (
061bd763) - Source code links added to every subsystem: caching (
8f6d37c1), queues (bb9af714), messaging (59cc2f57), locks (10241465), jobs (7df97b13), serialization (8819ba09), storage (bf2eb1b9) - Comprehensive hybrid caching documentation with RedisHybridCacheClient examples (
2fc124df,0791b496) - Cache stampede protection patterns (
a6cfd75c) - Delayed message delivery and distributed tracing guide (
da2c6162) - RabbitMQ delayed delivery and delayed-exchange plugin deprecation notes (#490)
- Redis read routing and replica support guide (
6860a0c1) - Redis replication lag risk documentation (
98323dbe) - Queue names vs. queue IDs explainer (
456389ed) - Cancellation token behavior clarification (
70a63d12) - Cache expiration differences across implementations (
1853daee) - Enhanced XML doc comments across all core interfaces (
7fdad859) - Updated job samples (
3e003a86) and added sample projects + benchmarks to the solution (160dd74f) - Added Foundatio.Mediator links to README and docs (
b8f0eba1)
Breaking Changes
- Dropped
netstandard2.0target: Foundatio now targetsnet8.0andnet10.0only. Consumers on .NET Framework or older runtimes must stay on v12.x. by @niemyjski in4c6aefed,a1089422 - Normalized
ICacheClient.IncrementAsyncTTL behavior: Increment operations now consistently apply the TTL parameter across all implementations. RemovedListRemoveAsyncExpiresInargument to align with all other Remove methods. by @niemyjski in #434 - Normalized
ICacheClientreturn values for expiration:GetExpirationAsyncreturns consistent values across implementations. by @niemyjski in #432 - Normalized
ISerializerargument validation: All serializer implementations now consistently validate arguments and throwArgumentException/ArgumentNullException. by @niemyjski in #440 - Added
QueueException: Queue operations now throwQueueExceptionfor queue-specific errors. Guard added against reusing behavior instances. by @niemyjski in #448 MessageBusIdandQueueIdchanged to init-only properties: These properties can no longer be set after construction. by @niemyjski inb73bf128- Removed obsolete
Set/SetAdd/SetRemovemethods from cache extensions: These were renamed toList*in v9.0.0 (Nov 2019) and have been[Obsolete]for 6+ years. by @niemyjski in150beed5 - Removed obsolete single-parameter
GetFileStreamAsyncoverload: Deprecated in v10.7.0 (Jan 2024) whenStreamModewas added. Use the overload acceptingStreamModeandCancellationToken. by @niemyjski in037baae5 - Comprehensive NRT (Nullable Reference Types) null-safety audit: Eliminated
null!suppressions, fixed latent null bugs, and added nullable attributes across the codebase. Return types and parameters may have changed nullability. by @niemyjski in #484, #498
- Make AcquireAsync throw on failure to fix the silent-null lock footgun by @ejsmith in #508
- Default JobResult.Message to empty string by @ejsmith in #507
- fix: abandon queue entry when GetQueueEntryLockAsync throws by @niemyjski in #509
Added
- Upgrade to xUnit v3 with
Foundatio.Xunit.v3: Test infrastructure upgraded to xUnit v3. NewFoundatio.Xunit.v3package with retry test attributes (RetryFactAttribute,RetryTheoryAttribute) for automatic retry of flaky tests. The existingFoundatio.Xunitpackage continues to support xUnit v2. by @niemyjski in #431 - Memory-limited in-memory cache:
InMemoryCacheClientnow supportsMaxMemorySizewith per-entry size limits and intelligent eviction when memory budgets are exceeded. by @niemyjski, @copilot in #400 - Poison message handling for queues and message bus: Deserialization failures in queues and the message bus are now gracefully handled as poison messages instead of crashing consumers. Dead letter logging improved. by @niemyjski in #455
SerializerException: New exception type for serialization-specific errors, enabling targeted error handling. by @niemyjski inb314a052MessageBusException: Consistent error handling for messaging operations with improved delayed message delivery. by @niemyjski in #443QueueDeletedevent onIQueue<T>: Consumers can now subscribe to queue deletion notifications. by @niemyjski in #447- OpenTelemetry error recording: Added
Activity.AddExceptionpolyfill for recording exceptions in distributed traces across all target frameworks. by @niemyjski in #446 - Synchronous
IResiliencePolicymethods: Added sync overloads (Execute,ExecuteAsync) alongside existing async methods. by @ejsmith in #445 - Feature-specific exceptions excluded from resilience policy retries:
QueueException,MessageBusException,StorageException,SerializerException, andCacheExceptionare no longer retried by resilience policies. by @niemyjski in318fa1a0 GetAllExpirationsAsyncandSetAllExpirationsAsynconICacheClient: Bulk expiration read/write support with improved test coverage. by @niemyjski in #426- Option to dispose underlying scoped implementations: Scoped cache/queue/etc. wrappers can now optionally dispose their underlying instances. by @niemyjski in #412
- Job status description:
JobStatusnow supports aDescriptionproperty. by @ejsmith in [fdcc1442](htt...
v13.0.0
v13.0.0
This is a major release with 368 files changed across the entire Foundatio codebase. Here are the themes that define v13:
- Reliability & Correctness: Dozens of race conditions, deadlocks, and disposal issues have been hunted down and fixed across queues, messaging, caching, and timers. Cancellation tokens are now properly linked to disposal for clean shutdown, and poison messages are gracefully handled instead of crashing consumers.
- Consistent Error Handling: Every subsystem now has its own exception type (
QueueException,MessageBusException,SerializerException) so consumers get predictable, catchable errors regardless of the underlying provider. These feature-specific exceptions are automatically excluded from resilience policy retries. - API Normalization: Cache TTL behavior, serializer validation, and expiration return values have been normalized across all implementations -- no more provider-specific quirks.
- Null Safety: A comprehensive NRT audit eliminated
null!suppressions across the codebase, fixing latent null bugs and adding proper nullable attributes. The API surface now accurately communicates nullability contracts. - Modern .NET: Dropped
netstandard2.0in favor ofnet8.0+net10.0. Replaced DeepCloner with the actively-maintained FastCloner.ScheduledTimernow usesTimeProviderfor testability. - Documentation Overhaul: Foundatio now has a dedicated documentation site with comprehensive guides, source code links, and real-world examples for every subsystem.
Documentation Site
Foundatio v13 ships with a brand-new documentation site covering every subsystem with guides, configuration examples, and direct source code links. Key additions:
- New docs site built with VitePress (
061bd763) - Source code links added to every subsystem: caching (
8f6d37c1), queues (bb9af714), messaging (59cc2f57), locks (10241465), jobs (7df97b13), serialization (8819ba09), storage (bf2eb1b9) - Comprehensive hybrid caching documentation with RedisHybridCacheClient examples (
2fc124df,0791b496) - Cache stampede protection patterns (
a6cfd75c) - Delayed message delivery and distributed tracing guide (
da2c6162) - RabbitMQ delayed delivery and delayed-exchange plugin deprecation notes (#490)
- Redis read routing and replica support guide (
6860a0c1) - Redis replication lag risk documentation (
98323dbe) - Queue names vs. queue IDs explainer (
456389ed) - Cancellation token behavior clarification (
70a63d12) - Cache expiration differences across implementations (
1853daee) - Enhanced XML doc comments across all core interfaces (
7fdad859) - Updated job samples (
3e003a86) and added sample projects + benchmarks to the solution (160dd74f) - Added Foundatio.Mediator links to README and docs (
b8f0eba1)
Breaking Changes
- Dropped
netstandard2.0target: Foundatio now targetsnet8.0andnet10.0only. Consumers on .NET Framework or older runtimes must stay on v12.x. by @niemyjski in4c6aefed,a1089422 - Normalized
ICacheClient.IncrementAsyncTTL behavior: Increment operations now consistently apply the TTL parameter across all implementations. RemovedListRemoveAsyncExpiresInargument to align with all other Remove methods. by @niemyjski in #434 - Normalized
ICacheClientreturn values for expiration:GetExpirationAsyncreturns consistent values across implementations. by @niemyjski in #432 - Normalized
ISerializerargument validation: All serializer implementations now consistently validate arguments and throwArgumentException/ArgumentNullException. by @niemyjski in #440 - Added
QueueException: Queue operations now throwQueueExceptionfor queue-specific errors. Guard added against reusing behavior instances. by @niemyjski in #448 MessageBusIdandQueueIdchanged to init-only properties: These properties can no longer be set after construction. by @niemyjski inb73bf128- Removed obsolete
Set/SetAdd/SetRemovemethods from cache extensions: These were renamed toList*in v9.0.0 (Nov 2019) and have been[Obsolete]for 6+ years. by @niemyjski in150beed5 - Removed obsolete single-parameter
GetFileStreamAsyncoverload: Deprecated in v10.7.0 (Jan 2024) whenStreamModewas added. Use the overload acceptingStreamModeandCancellationToken. by @niemyjski in037baae5 - Comprehensive NRT (Nullable Reference Types) null-safety audit: Eliminated
null!suppressions, fixed latent null bugs, and added nullable attributes across the codebase. Return types and parameters may have changed nullability. by @niemyjski in #484, #498
Added
- Upgrade to xUnit v3 with
Foundatio.Xunit.v3: Test infrastructure upgraded to xUnit v3. NewFoundatio.Xunit.v3package with retry test attributes (RetryFactAttribute,RetryTheoryAttribute) for automatic retry of flaky tests. The existingFoundatio.Xunitpackage continues to support xUnit v2. by @niemyjski in #431 - Memory-limited in-memory cache:
InMemoryCacheClientnow supportsMaxMemorySizewith per-entry size limits and intelligent eviction when memory budgets are exceeded. by @niemyjski, @copilot in #400 - Poison message handling for queues and message bus: Deserialization failures in queues and the message bus are now gracefully handled as poison messages instead of crashing consumers. Dead letter logging improved. by @niemyjski in #455
SerializerException: New exception type for serialization-specific errors, enabling targeted error handling. by @niemyjski inb314a052MessageBusException: Consistent error handling for messaging operations with improved delayed message delivery. by @niemyjski in #443QueueDeletedevent onIQueue<T>: Consumers can now subscribe to queue deletion notifications. by @niemyjski in #447- OpenTelemetry error recording: Added
Activity.AddExceptionpolyfill for recording exceptions in distributed traces across all target frameworks. by @niemyjski in #446 - Synchronous
IResiliencePolicymethods: Added sync overloads (Execute,ExecuteAsync) alongside existing async methods. by @ejsmith in #445 - Feature-specific exceptions excluded from resilience policy retries:
QueueException,MessageBusException,StorageException,SerializerException, andCacheExceptionare no longer retried by resilience policies. by @niemyjski in318fa1a0 GetAllExpirationsAsyncandSetAllExpirationsAsynconICacheClient: Bulk expiration read/write support with improved test coverage. by @niemyjski in #426- Option to dispose underlying scoped implementations: Scoped cache/queue/etc. wrappers can now optionally dispose their underlying instances. by @niemyjski in #412
- Job status description:
JobStatusnow supports aDescriptionproperty. by @ejsmith infdcc1442 - Enforce 5ms minimum expiration across all cache implementations: Prevents extremely short TTLs that cause race conditions. by @niemyjski in #463
net10.0target framework: Added .NET 10 support alongside .NET 8. by @niemyjski in [4c6aefed](https://github.c...
v13.0.0-beta6
What's Changed
- fix: implement two-phase dispose for MessageBus subscription lifecycle by @niemyjski in #492
- Add poison message handling for queue deserialization failures by @niemyjski in #455
- Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
- Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
- Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
- FastCloner as DeepCloner replacement by @lofcz in #469
- Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
- Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
- Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
- sync fast cloner to 3.5.3 by @lofcz in #485
- refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
- Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
- Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
- Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
- Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
- Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490
New Contributors
Full Changelog: v13.0.0-beta3...v13.0.0-beta6
v13.0.0-beta5
What's Changed
- Add poison message handling for queue deserialization failures by @niemyjski in #455
- Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
- Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
- Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
- FastCloner as DeepCloner replacement by @lofcz in #469
- Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
- Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
- Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
- sync fast cloner to 3.5.3 by @lofcz in #485
- refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
- Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
- Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
- Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
- Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
- Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490
New Contributors
Full Changelog: v13.0.0-beta3...v13.0.0-beta5
v13.0.0-beta4
What's Changed
- Add poison message handling for queue deserialization failures by @niemyjski in #455
- Enforce 5ms minimum expiration across all cache implementations by @niemyjski in #463
- Fix InvalidCastException in InMemoryCacheClient.GetAsync<object>() for non-IConvertible types by @Copilot in #468
- Fix race condition in InMemoryQueue.AbandonAsync causing flaky RunUntilEmptyAsync by @niemyjski in #470
- FastCloner as DeepCloner replacement by @lofcz in #469
- Bump dompurify from 3.3.1 to 3.3.2 in /docs by @dependabot[bot] in #471
- Bump rollup from 4.55.1 to 4.59.0 in /docs by @dependabot[bot] in #465
- Bump minimatch from 10.1.1 to 10.2.4 in /docs by @dependabot[bot] in #464
- sync fast cloner to 3.5.3 by @lofcz in #485
- refactor: comprehensive NRT null-safety audit — eliminate null! suppressions, fix latent bugs, add nullable attributes by @niemyjski in #484
- Fix flaky metrics test caused by DateTime.UtcNow timer resolution race by @niemyjski in #488
- Bump lodash-es from 4.17.23 to 4.18.1 in /docs by @dependabot[bot] in #489
- Bump vite from 7.3.1 to 7.3.2 in /docs by @dependabot[bot] in #486
- Bump picomatch from 4.0.3 to 4.0.4 in /docs by @dependabot[bot] in #483
- Document RabbitMQ delayed delivery and plugin deprecation by @niemyjski in #490
New Contributors
Full Changelog: v13.0.0-beta3...v13.0.0-beta4
v13.0.0-beta3
What's Changed
- Fix InMemoryQueue retry: create fresh entry per attempt (entry isolation) by @niemyjski in #454
Full Changelog: v13.0.0-beta2...v13.0.0-beta3
v13.0.0-beta2
What's Changed
- [Breaking]: Normalize ISerializer argument validation and enhance test coverage by @niemyjski in #440
- Improve delayed message delivery and add MessageBusException for consistent error handling by @niemyjski in #443
- Add DeepClone benchmarks, upgrade DeepCloner to v0.10.4, and add sync resilience methods by @niemyjski in #445
- Add QueueDeleted event to IQueue for queue deletion notifications by @niemyjski in #447
- Add QueueException and guard against reusing behavior instances by @niemyjski in #448
- Add OpenTelemetry error recording with Activity.AddException polyfill by @niemyjski in #446
Full Changelog: v13.0.0-beta1...v13.0.0-beta2