🍱 🚀 Features
- ✨ Enhanced support of amqp connection string #1155
🚀 The goal of this release is to support this kind of connection string:
ConnectionConfiguration.AmqpConnectionStringis deprecated and preferred way to get
ConnectionConfigurationfrom amqp connection string is to call
🍱 🚀 Features
- Publishing with mandatory flag #1150
A global setting
mandatoryPublish=truein the connection string) has been added to allow to FuturePublish, Publish, Request or Send to publish with mandatory flag. If mandatory flag is set for publish and a message is impossible to route to any queue, then
Mandatory Publishworks only if
Publisher Confirmsis on.
🔧 Example of a configuration:
using var bus = RabbitHutch.CreateBus("host=localhost;mandatoryPublish=true;publisherConfirms=true")
🚀 This major release has aimed at two following goals:
⬆️ 1. Upgrading of the public interface to comply with modern requirements
- 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(
IBuscontained interfaces of three different things(Publish-Subscribe, Rpc and Send-Receive). Also, FuturePublish stuff was an extension to
⏱ Now, there are four interfaces(
👀 Most of the synchronous methods have been replaced by their asynchronous versions and have been exposed as extensions. In addition,
CancellationTokenhas 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
EasyNetQcompletely relies on RabbitMQ.Client reconnection logic, but
TopologyRecoveryis 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.
PullingConsumerhas 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
👍 Enchanced support of BasicReturn
⏱ Removal of class constraint from
👍 Basic support of
Single Active Consumer
SendReceive.SendAsyncdoesn'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.