EasyNetQ v6.0.0 Release Notes

Release Date: 2020-11-01 // over 3 years ago
  • ๐Ÿš€ This major release has aimed at two following goals:

    โฌ†๏ธ 1. Upgrading of the public interface to comply with modern requirements

    1. Fixing various bugs which were hard to eliminate without complex changes in the internals of the library.

    A full list of changes can be found here.

    โฑ IBus has been split into many interfaces(IPubSub, IRpc, ISendReceive, IScheduler)

    Previously, IBus contained interfaces of three different things(Publish-Subscribe, Rpc and Send-Receive). Also, FuturePublish stuff was an extension to IBus.

    โฑ Now, there are four interfaces(IPubSub, IRpc, ISendReceive, IScheduler) and IBus exposes them.

    Async-first API

    ๐Ÿ‘€ Most of the synchronous methods have been replaced by their asynchronous versions and have been exposed as extensions. In addition, CancellationToken has been added almost everywhere(if you see an async method without it, feel free to create a PR) and it is respected as much as possible.

    Exchange, Queue, Consumer declaration

    ๐Ÿ‘ These declerations have been reworked for better extensibility: now it is possible to use custom arguments everywhere.

    Reconnection mechanics have been reworked

    EasyNetQ completely relies on RabbitMQ.Client reconnection logic, but TopologyRecovery is still disabled.

    Channel per operation

    ๐Ÿ‘€ Several channels are created on the publisher side to mitigate timeout issues caused by a mix of async and rpc commands on the same channel. See #1063 for more details.

    Pulling Consumer

    ๐Ÿ‘ PullingConsumer has been introduced as a replacement for IAdvancedBus.IBasicGetResult Get(IQueue queue): auto ack or manual ack are supported as well as batch acks.

    โฑ Messages priority support in IPubSub, IRpc, ISendReceive and IScheduler

    Nack from IAdvancedBus consumer callback.

    ๐Ÿ‘ Enchanced support of BasicReturn

    โฑ Removal of class constraint from IPubSub, IRpc, ISendReceive and IScheduler

    Strong naming

    ๐Ÿ‘ Basic support of Quorum Queues and Single Active Consumer

    SendReceive.SendAsync doesn't declare a queue anymore

    Other patterns(PubSub, Rpc) worked a bit different from SendReceive before v6: only a consumer side(Subscribe, Respond methods) was responsible for a queue declaration, but the behaviour of SendReceive was different(as you mentioned queue declaration was on a consumer side(Receive method) and on publisher side(Send method) as well).
    ๐Ÿ”ง Declaration of a queue on a publisher side(Send method) limits the way how the queue could be declared(lazy, message TTL, queue limits and a lot of other things) because it looks like mixing both publisher and queue configuration could lead to a mess on a publisher side.