Skip to content

Latest commit

 

History

History
1044 lines (707 loc) · 80.5 KB

CHANGELOG.md

File metadata and controls

1044 lines (707 loc) · 80.5 KB

Changelog

Full Changelog

Merged pull requests:

  • Fix build warnings in API #1718 (lukebakken)
  • Change OTel attribute messaging.operation to messaging.operation.type #1716 (iinuwa)
  • Throw when lease not acquired. This can happen then the rate limiter doesn't allow queuing or is generally wrongly configured #1714 (danielmarbach)

v7.0.0-rc.14 (2024-10-24)

Full Changelog

Implemented enhancements:

  • Make handling of publisher confirmations transparent to the user #1682

Merged pull requests:

v7.0.0-rc.13 (2024-10-22)

Full Changelog

Merged pull requests:

v7.0.0-rc.12 (2024-10-08)

Full Changelog

Implemented enhancements:

  • Allow DateTime for Headers in IBasicProperties #1691
  • Polyfill language gaps #1688
  • DispatchConsumerConcurrency might be misplaced on the connection factory #1668
  • Consider using AsyncManualResetEvent when handling flow state #1644

Fixed bugs:

  • Intermittent flakiness of v7.0 RC #1676

Merged pull requests:

v7.0.0-rc.11 (2024-09-12)

Full Changelog

Merged pull requests:

v7.0.0-rc.10 (2024-09-10)

Full Changelog

Merged pull requests:

v7.0.0-rc.9 (2024-09-06)

Full Changelog

Closed issues:

  • Re-review use of Task vs ValueTask in API #1645

Merged pull requests:

Full Changelog

Closed issues:

  • Re-review use of Task vs ValueTask in API #1645

Merged pull requests:

  • Added ability to use Issuer to receive Token Endpoint for the OAuth2ClientBuilder #1656 (Lyphion)
  • Consistently use Task or ValueTask in APIs #1646 (lukebakken)

v7.0.0-rc.8 (2024-08-06)

Full Changelog

Fixed bugs:

  • Automatic recovery fails if the channel is disposed #1647
  • Timer leak and potential JWT/OAuth2 expiry in TimerBasedCredentialRefresher [OAuth2] #1639

Merged pull requests:

v7.0.0-rc.7 (2024-07-31)

Full Changelog

Merged pull requests:

v7.0.0-rc.6 (2024-07-22)

Full Changelog

Implemented enhancements:

  • Nullable Reference Types #1596

Fixed bugs:

  • NullReferenceException when setting null Uri into ConnectionFactory #1622
  • RabbitMQActivitySource.Deliver cannot be used by types that implement Consumer #1621

Merged pull requests:

v7.0.0-rc.5 (2024-07-09)

Full Changelog

Implemented enhancements:

  • Testability of HandleBasicDeliver in IAsyncBasicConsumer #1630

Fixed bugs:

  • Connection recovery issue when docker container stopped / started. #1623

Closed issues:

  • Back-port #1616 to 6.x #1617

Merged pull requests:

  • Replace ReadOnlyBasicProperties with IReadOnlyBasicProperties #1631 (Tornhoof)
  • make IncomingCommand a class and simplify code around it #1628 (bollhals)
  • Add NRT for the whole client assembly #1626 (bollhals)

v7.0.0-rc.4 (2024-07-02)

Full Changelog

Closed issues:

  • "Serialized to wrong size" exception when call BasicPublish #1620

Merged pull requests:

  • Fix issue when recovery takes longer than recovery interval #1624 (lukebakken)
  • Avoid boxing in IEndpointResolverExtensions.cs #1619 (lechu445)

v7.0.0-rc.3 (2024-06-27)

Full Changelog

Implemented enhancements:

  • Expose ConnectionFactory.DispatchConsumersAsync as a ReadOnly property on IConnection #1610

Merged pull requests:

v7.0.0-rc.2 (2024-06-21)

Full Changelog

Fixed bugs:

  • Issues with 7.0rc1 IAsyncBasicConsumer's method #1601
  • [OTel] Activity is not produced for BasicConsumeAsync on .NET Framework #1533

Closed issues:

  • "Ship" public API #1570

Merged pull requests:

v7.0.0-rc.1 (2024-06-04)

Full Changelog

Implemented enhancements:

  • Ensure RabbitMQ.Client.OpenTelemetry is published to NuGet correctly #1591
  • Review TaskExtensions #1425
  • Support cancellation #1420

Fixed bugs:

  • Calling channel.CloseAsync from within AsyncEventingBasicConsumer handler causes deadlock #1567
  • MaxMessageSize actually limits frame size #1356
  • Calling Dispose on AutorecoveringModel that has already shutdown throws NullRefException #825
  • Opening a channel inside a consumer interface callback times out waiting for continuation #650

Closed issues:

  • Incorrect comments in some public member documentation #1109
  • CallbackException not raised for AsyncEventingBasicConsumer #1038
  • Unhelpful exception message when clientProvidedName is too long #980
  • Pool workers to handle incoming deliveries, ACKs etc. #906
  • AutorecoveringConnection prevents AppDomain.Unload() of enclosing AppDomain #826
  • NullReferenceException when writing a frame on a connection being closed by the server #822
  • Log what TLS version(s) is enabled on the system #765

Merged pull requests:

v7.0.0-alpha.6 (2024-05-16)

Full Changelog

Implemented enhancements:

  • Using the wrong consumer dispatcher type should throw an exception #1408

Fixed bugs:

  • 7.0.0-alpha.2 - Unexpected Exception: Unable to read data from the transport connection: Connection reset by peer #1464
  • Do not create exceptions just for logging #1440
  • Only throw RabbitMQ.Client-specific exceptions. #1439

Merged pull requests:

v7.0.0-alpha.5 (2024-04-22)

Full Changelog

Implemented enhancements:

  • add suport for wasm #1518
  • Optimise dependencies needed for v7 release #1480
  • Add net 6.0 so that conditional packages can be defined #1479
  • ClientArrayPool tracking is already supported by ArrayPool #1421

Closed issues:

Merged pull requests:

v7.0.0-alpha.4 (2024-03-05)

Full Changelog

Merged pull requests:

v7.0.0-alpha.3 (2024-02-20)

Full Changelog

Implemented enhancements:

  • Consider re-trying opening connections in a specific scenario #1448
  • Trimming and AOT compatibility of this library #1410
  • Reduce allocations by using pooled memory and recycling memory streams #694
  • Consider adding static analysis #444

Fixed bugs:

  • HandleMainLoopException puts exception StackTrace in the EventSource Message #1493

Closed issues:

  • Async API - socket read timeout has no effect #1492
  • Deadlock when closing a channel in the Received Event #1382
  • Enable long-running tests on a cron schedule. #1157
  • Heap size grows when publishing a very large batch of messages #1106
  • IModel.IsClosed set to false after dispose #1086
  • WaitForConfirmsOrDie won't return if DeliveryTag on the client is diverged from the server #1043
  • Bug in topology-auto-recovery functionality #1035
  • Model.Close does not await CloseAsync #1011
  • Discussion: Supported frameworks #867
  • Evaluating how to support tracing and OpenTelemetry #776

Merged pull requests:

v7.0.0-alpha.2 (2023-12-14)

Full Changelog

Fixed bugs:

  • 7.0: Stack overflow "ExchangeDeclareAsync" #1444

Closed issues:

  • Port #1438 to main #1441

Merged pull requests:

v6.8.1 (2023-12-11)

Full Changelog

v6.8.1-rc.1 (2023-12-11)

Full Changelog

Fixed bugs:

  • When using assembly binding redirect a connection error is shown #1434
  • Queue Fails to Delete with Orphaned Binding #1376

v6.8.0 (2023-12-05)

Full Changelog

Fixed bugs:

  • Opening multiple connections from a ConnectionFactory with CredentialsRefresher makes the second connection fail #1429

v6.8.0-rc.1 (2023-12-01)

Full Changelog

Closed issues:

  • Should IModelExensions be named IModelExtensions (with a "t")? #1430
  • Review async RPC continuations, await, and ConfigureAwait #1427

v7.0.0-alpha.1 (2023-11-20)

Full Changelog

Closed issues:

  • Xunit parallel test execution #1412
  • Port "Implement Full Async Channel" PR to main #1308
  • ConnectionRecovery recovers models before consumers #1076
  • connection topology recover can miss restore consumers #1047
  • Proposal: Full async channel interface (IModel) #970
  • AMQP 0-9-1 Channel (IModel) API with async methods #843

Merged pull requests:

v6.7.0 (2023-11-16)

Full Changelog

v6.7.0-rc.2 (2023-11-16)

Full Changelog

v6.7.0-rc.1 (2023-11-15)

Full Changelog

Fixed bugs:

  • 6.5.0 can cause application freeze due to TaskScheduler change #1357

Closed issues:

  • Consistent naming for methods that return Tasks #1296
  • Take advantage of immutable collections #1171

v7.0.0-alpha.0 (2023-10-16)

Full Changelog

Implemented enhancements:

Fixed bugs:

  • If CreateConnection is called on a thread with a non-default TaskScheduler it will attempt to start the MainLoop on that scheduler. #1355
  • Fix flaky connection recovery tests. #1148 (lukebakken)
  • Typo in Extension class name #922 (JeremyMahieu)

Merged pull requests:

v6.6.0 (2023-09-25)

Full Changelog

v6.6.0-beta.0 (2023-09-25)

Full Changelog

Implemented enhancements:

  • Allow update of RoutingKey during Nack #1333
  • Support credential refresh for OAuth 2/JWT authentication scenarios #956

Fixed bugs:

  • Configured MaxMessageSize is not honoured #1378
  • ConnectionFactory Authmechanisms has incorrect sharing between instances #1370
  • Unknown reply code 312 #1331

Closed issues:

  • Invalid parameter name in IManagementClient.DeleteExchangeBindingAsync #1375
  • Closing connection in EventingBasicConsumer.Received event handler freezes execution of event handler and connection is never closed #1292

v6.5.0 (2023-03-25)

Full Changelog

Implemented enhancements:

  • Investigate the use of TaskCreationOptions.LongRunning #1318
  • Exception during recovery causes recovery failure #658

Closed issues:

  • Consumer tags aren't cleaned on channel close causing memory leak. #1302
  • Impossible to use a ulong as a header value #1298
  • Recovery does not appear to save consumer arguments #1293
  • Timeout when opening a new channel after channel exception #1246
  • Autorecovery for server-named queues loops indefinitely when consumer listen this queue #1238
  • IModel.WaitForConfirmsOrDie* methods don't document that they close #1234
  • Port #1223 to main #1225
  • Better integrate max message size #1223
  • 7.0 Release Checklist #1191
  • Missing IRecoveryable implementation #998
  • BasicGetResult body memory safety in 6.x #994

Changes Between 6.3.1 and 6.4.0

This release adds the ability to specify a maximum message size when receiving data. The default values are:

  • RabbitMQ .NET client 7.0.0 and beyond: 128MiB
  • RabbitMQ .NET client 6.4.0 up to 7.0.0: no limit by default

Receiving a frame that specifies a content larger than the limit will throw an execption. This is to help prevent situations as described in this discussion.

To set a limit, use the set MaxMessageSize on your ConnectionFactory before opening connections:

// This sets the limit to 512MiB
var cf = new ConnectionFactory();
cf.MaxMessageSize = 536870912;
var conn = cf.CreateConnection()`

GitHub milestone: 6.4.0 Diff: link

Changes Between 6.3.0 and 6.3.1

GitHub milestone: 6.3.1 Diff: link

Changes Between 6.2.4 and 6.3.0

GitHub milestone: 6.3.0 Diff: link

Changes Between 6.2.3 and 6.2.4

GitHub milestone: 6.2.4

This release contains some important bug fixes:

Changes Between 6.2.1 and 6.2.3

GitHub milestone: 6.2.3 GitHub milestone: 6.2.2

Changes Between 6.2.0 and 6.2.1

6.2.0 was published incorrectly, resulting in version 6.2.1

GitHub milestone: 6.2.1.

Changes Between 6.1.0 and 6.2.0

A full list of changes can be found in the GitHub milestone: 6.2.0.

Changes Between 6.0.0 and 6.1.0

This release continues with improvements to memory use and object allocations.

A full list of changes can be found in the GitHub milestone: 6.1.0.

Changes Between 5.2.0 and 6.0.0

This major release of this client introduces substantial improvements in terms of memory footprint and throughput. They come at the cost of minor but important breaking API changes covered below.

The client now requires .NET Framework 4.6.1 or .NET Standard 2.0. Earlier versions are no longer supported by the 6.x series.

Key improvements in this release have been the result of hard work by our stellar community members (in no particular order): @stebet, @bording, @Anarh2404, @danielmarbach, and others.

A full list of changes can be found in the GitHub milestone: 6.0.0.

The Switch to System.Memory (and Significantly Lower Memory Footprint that Comes with It)

The client now uses the System.Memory library for message and command payloads. This significantly reduces object allocation and GC pressure for heavy workloads but also potentially requires application changes: consumer delivery payloads are now of instance System.ReadOnlyMemory<byte> instead of byte[].

While there's an implicit conversion for these types, instances of System.ReadOnlyMemory<byte> must be copied or consumed/deserialised before delivery handler completes. Holding on to delivered payloads and referencing them at a later point is no longer safe.

The same applies to publishers and the IModel.BasicPublish method: prefer using System.ReadOnlyMemory<byte> over byte[] and dont' assume that this memory can be retained and used outside of the scope of the publishing function.

GitHub issue: #732

Timeouts Use System.TimeSpan

All timeout arguments now use System.TimeSpan values.

GitHub issue: #688

Reduced Public API Surface

No major changes here but this is potentially breaking. Only public classes that were never meant to be publicly used have been turned internal to the client.

GitHub issue: #714

Requires .NET Framework 4.6.1 or .NET Standard 2.0

The client now requires .NET Framework 4.6.1 or .NET Standard 2.0. Earlier versions are no longer supported.

GitHub issue: #686

Microsoft.Diagnostics.Tracing.EventSource Dependency Dropped

Microsoft.Diagnostics.Tracing.EventSource dependency has been removed. It was an annoying dependency to have for some environments.

Source Linking

The library now supports source linking.

GitHub issue: #697

NuGet Source Packages

Source packages are now also distributed via NuGet.

CRL Checks for Server x.509 (TLS) Certificates

Added a TLS option to enforce CRL checks for server certificates.

GitHub issue: #500

Changes Between 5.1.2 and 5.2.0

Please see the milestone for all changes:

GitHub 5.2.0 Milestone

Selected highlights:

Add support for netstandard2.0

GitHub issues: #428, #435

Re-introduce lock for all socket writes

GitHub PR: rabbitmq-dotnet-client#702

Changes Between 5.1.1 and 5.1.2

Bump System.Net.Security to 4.3.2

Changes Between 5.1.0 and 5.1.1

Deprecate messaging patterns

GitHub PR: rabbitmq-dotnet-client#654

Fix stack overflow

GitHub PR: rabbitmq-dotnet-client#578

Byte conversion support

GitHub PR: rabbitmq-dotnet-client#579

Heartbeat write deadlock fix

GitHub PR: rabbitmq-dotnet-client#636

Changes Between 5.0.x and 5.1.0

Batch Publishing

GitHub PR: rabbitmq-dotnet-client#368

Introduced a Static Property to AmqpTcpEndpoint to specify the default TLS Protocol Version(s)

GitHub PR: rabbitmq-dotnet-client#389

All Exceptions are Collected When Selecting an Endpoint

GitHub PR: rabbitmq-dotnet-client#377

Reduced Lock Contention for Frame Writes

GitHub PR: rabbitmq-dotnet-client#354

Changes Between 4.1.x and 5.0.1

Async consumers

GitHub PR: rabbitmq-dotnet-client#307

Enable connection recovery by default

GitHub issue: rabbitmq-dotnet-client#271

Replace Console.WriteLine logging with EventSource

GitHub issue: rabbitmq-dotnet-client#94

Add events for connection recovery errors and connection success

GitHub issue: rabbitmq-dotnet-client#156

noAck renamed to autoAck

GitHub issue: rabbitmq-dotnet-client#255

Make uri and Uri setters in ConnectionFactory obsolete

GitHub issue: rabbitmq-dotnet-client#264

Ensure connection recovery does not keep going after the connection has been closed

GitHub issue: rabbitmq-dotnet-client#294

Synchronize access to the manuallyClosed field in AutorecoveringConnection.

GitHub issue: rabbitmq-dotnet-client#291

Use concurrent collections inside AutorecoveringConnection

GitHub issue: rabbitmq-dotnet-client#288

Add property to allow an endpoint to specify the address family

GitHub issue: rabbitmq-dotnet-client#226

Fix potential EventingBasicConsumer race condition

Re-introduce a Uri property on IConnectionFactory

GitHub issue: rabbitmq-dotnet-client#330

Add CreateConnection overload to IConnectionFactory

GitHub PR: rabbitmq-dotnet-client#325

Changes Between 4.1.0 and 4.1.1

Fixed XML Documentation Generation

GitHub issue: rabbitmq-dotnet-client#269

Contributed by Brandon Ording.

Fixed WinRT Project Build

GitHub issue: rabbitmq-dotnet-client#270

Contributed by Brandon Ording.

TcpClientAdapter Nullifies Socket Field on Close

GitHub issue: rabbitmq-dotnet-client#263

HeartbeatReadTimerCallback Handles Potential NullReferenceException

GitHub issue: rabbitmq-dotnet-client#257

Changes Between 4.0.2 and 4.1.0

4.1.0 was released on September 14th, 2016.

No lock contention at consumer work service

Switched to a "thread-per-model" approach in the ConsumerWorkService.

The TaskScheduler property on ConnectionFactory has been obsoleted and can no longer be used to control concurrency.

Utility class changes:

  • BatchingWorkPool has been removed
  • ConsumerWorkService no longer has a constructor that takes a TaskScheduler
  • ConsumerWorkService.MAX_THUNK_EXECUTION_BATCH_SIZE has been removed
  • ConsumerWorkService no longer has the ExecuteThunk or RegisterKey methods

Contributed by Brandon Ording and Szymon Kulec.

GH issue: rabbitmq-dotnet-client#251

Changes Between 4.0.1 and 4.0.2 (September 1st, 2016)

TcpClientAdapter Didn't Respect IP Address Family

GH issue: rabbitmq-dotnet-client#244

Changes Between 4.0.0 and 4.0.1 (August 25th, 2016)

ConnectionFactory#CreateConnection Deadlock

ConnectionFactory#CreateConnection could deadlock in some circumstances.

GH issue: rabbitmq-dotnet-client#239.

Occasional NullReferenceException in Endpoint Resolution

GH issue: rabbitmq-dotnet-client#238

* This Changelog was automatically generated by github_changelog_generator