Releases: rabbitmq/rabbitmq-stream-dotnet-client
v1.3.0-beta-1
The client is distributed via NuGet.
The main change is:
- Run the Consumer MessageHandler in a Task in #250
The socket thread is now free to receive the other command during consumption.
The message handler is now totally async:
await _config.MessageHandler(this, new MessageContext(message.MessageOffset,
TimeSpan.FromMilliseconds(chunk.Timestamp)), message).ConfigureAwait(false);
- We reduced the log noise in case of consumer disconnection. You can still enable the debug log configuration to see all the logs.
Enhancements
- Small super stream improvements by @Gsantomaggio in #236
- Fix spelling typo in client provided name by @ngbrown in #239
- Documentation website by @Gsantomaggio in #235
- Make GitHub pages by @Gsantomaggio in #241
- Implement stream stats by @Gsantomaggio in #242
- Use UtcDateTime by @lukebakken in #243
- Miscellaneous code updates by @lukebakken in #244
- Use various modern dotnet build files by @lukebakken in #253
- Misc updates by @lukebakken in #256
- Run the Consumer MessageHandler in a Task by @Gsantomaggio in #250
New Contributors
Full Changelog: v1.2.0...v1.3.0-beta.1
v1.2.0
The client is distributed via NuGet.
Bug Fix
- Handle System.InvalidOperationException in case of big buffer in #220
- Handle multi-types in the stream in #229
- Small Fix read boolean in #233
Enhancements
- Implement Deduplicating Producer in #234
- Improve the reconnect in #230
- Minor doc/code style cleanup by @ricardSiliuk in #223
- ConfigureAwait(false) for close stream/consumer/producer, query offset and create producer by @iuribrindeiro in #231
Deprecation
The field Reference
is deprecated in ProducerConfig
.
var producer = await Producer.Create(
new ProducerConfig(system, stream)
{
Reference = "hello", /// <<-- Deprecated
The Reference
is needed for deduplication. In this version there is a specific class for that: see #234
Full Changelog: v1.1.1...v1.2.0
V1.1.1
The client is distributed via NuGet.
Enhancements
- Minor doc/codestyle cleanup by @ricardSiliuk in #223
- Decode the address type by @Gsantomaggio in #219
Full Changelog: v1.1.0...v1.1.1
v1.1.0
The client is distributed via NuGet.
Enhancements
- Add net7.0 target in #215 and #216
- Fix the read in the AMQP parser in #217. The parser can now tolerate non-UTF8 data.
Full Changelog: v1.0.2...v1.1.0
v1.0.2
The client is distributed via NuGet.
What's Changed
- AMQP 1.0 Parser Calculate correct maps size add Symbol by @Gsantomaggio in #211
Note
- The client does not write the Properties correctly before this fix.
What is the side effect?
If an AMQP client reads the data written with this client (<= 1.0.1
) that contains Properties
or ApplicationProperites
will have this problem rabbitmq/rabbitmq-server#6837
What do I need to do?
- Nothing:
If you use only this client, it will continue to work.
If you don'tProperties
/ApplicationProperties
Full Changelog: v1.0.1...v1.0.2
v1.0.1
The client is distributed via NuGet.
Enhancements
- Add consumer name property by @Gsantomaggio in #203
- Add cancellation token during subscription by @Gsantomaggio in #206
Full Changelog: v1.0.0...v1.0.1
v1.0.0
The client is distributed via NuGet.
Breaking changes
- Adding
ILogger
abstraction and replacingLogEventSource
with it by @ricardSiliuk in #190 (See the documentation) - Rename the
SuperStreamConsumer
toRawSuperStreamConsumer
by @Gsantomaggio in #192
Enhancements
- Add SuperStream consumer info by @Gsantomaggio in #187
- Make the AddressResolver more generic by @Gsantomaggio in #189
- Add documentation for logging by @Gsantomaggio in #193
- Complete Super Stream Single Active consumer example by @Gsantomaggio in #197
- Change the error messages by @Gsantomaggio in #198
- Reduce the class's visibility by @Gsantomaggio in #199
- Sync-up editorconfig with RabbitMQ .NET client by @lukebakken in #194
- Add TaskCompletionSource to wait the test instead by @Gsantomaggio in #201
Full Changelog: v1.0.0-rc.8...v1.0.0
v1.0.0-rc.8
The client is distributed via NuGet.
Enhancements
- Add
GetAwaiter().GetResult();
on MessageHandler in #184 . It avoids thread pool exhaustion. Thanks to @ricsiLT for testing it. - Expose MessagesBufferSize in #183
Full Changelog: v1.0.0-rc.7...v1.0.0-rc.8
v1.0.0-rc.7
The client is distributed via NuGet.
Note
This release contains important performance improvements.
Enhancements
- Fix style in select classes to be more dotnet-like by @ricardSiliuk in #155
- Improve consumer performance see #180 and #181 by @sungam3r
- Improve publish in #182
New Contributors
Full Changelog: v1.0.0-rc.6...v1.0.0-rc.7
v1.0.0-rc.6
The client is distributed via NuGet.
Breaking changes
This version contains a few braking changes; please read the following documentation.
-
Why so many changes?
The idea is to give a similar JavaStream client user experience.
-
Classes concepts:
Class Description How to get Note RawProducer Low-Level producer system.CreateRawProducer(new RawProducerConfig("stream")
RawSuperStreamProducer Low Level Super Stream Producer `system.RawCreateSuperStreamProducer(new RawSuperStreamProducerConfig("superStream")` Producer Hight Level producer. Producer.Create(new ProducerConfig(system, stream))
-Handle RawProducer
andRawSuperStreamProducer
- Auto reconnect
- Auto publishing id
- Confirm Messages with errors (timeout..etc)RawConsumer Low Level consumer system.CreateRawConsumer(newRawConsumerConfig("stream")
RawSuperStreamConsumer Low Level Super Stream Consumer `system.RawCreateSuperStreamConsumer(new RawSuperStreamConsumerConfig("superStream")` Consumer Hight Level Consumer. Consumer.Create(new ConsumerConfig(system, stream))
-Handle RawConsumer and RawCreateSuperStreamConsumer
- Auto reconnect -
Class mapping from version:
v1.0.0-rc.5
tov1.0.0-rc.6
<= v1.0.0-rc.5
>= v1.0.0-rc.6
Producer
RawProducer
Consumer
RawConsumer
ReliableProducer
Producer
ReliableConsumer
Consumer
Update example:
<=v1.0.0-rc.5 from |
>= v1.0.0-rc.6 to |
---|---|
await system.CreateProducer(new ProducerConfig() {stream = "mystream"}) |
`await system.CreateRawProducer(new |
RawProducerConfig(streamName))` | |
await system.CreateConsumer(new ConsumerConfig() {stream = "mystream"}) |
`await system.CreateRawConsumer(new |
RawConsumerConfig(streamName))` | |
await ReliableProducer.CreateReliableProducer(new ReliableProducerConfig() {..} |
`await Producer.Create(new |
ProducerConfig(system,stream)` | |
await ReliableConsumer.CreateReliableConsumer(new ReliableConsumerConfig() {..} |
`await Consumer.Create(new |
ConsumerConfig(system,stream)` |
-
Configuration changes:
All the
*Config
classes contain a constructor with the mandatory fields. So it is easier for the user understand how to use the class.For example:
new RawProducerConfig(stream)
<-- the stream is mandatory -
Exceptions
All the validations are now under the
ArgumentException
Exception
For example:
new RawProducerConfig("")
<-- raisesArgumentException
-
Questions:
Q: Why the
Producer
/Consumer
classes are not provided directly bysystem
?
A: We'd like to leave the low-level classes as easy as possible. A user can implement a similarProducer
starting fromRawProducer
andRawSuperStreamProducer
as we did.Q: Which classes should I use?
A: We suggest usingProducer
/Consumer
classesQ: When to use
RawProducer
?
A: When you want a low-level producer and you what to handle the reconnections/confirmation differently. Note:RawProducer
could be faster than
theProducer
under certain situations since it doesn't have to handle the sent/received messages.
Release notes
Enhancements
- Add Single Active Consumer by @Gsantomaggio in #152
- Add SuperStream for ReliableProducer by @Gsantomaggio in #172
- Add Super Stream Consumer by @Gsantomaggio in #174
- Change definition of MaxLengthBytes stream specification - #165 by @PaoloLaurenti in #166
Bug Fix
- Fix occurrences of sync-over-async by @Hawxy in #164
- Fix Reconnect ReliableProducer/ ReliableConsumer in case leader is down by @Gsantomaggio in #163
- Add client cert example to readme by @ricsiLT in #169
- AMQP Parser: Change the Read and Write for Strings by @Gsantomaggio in #176
Breaking changes
- Refactor Classes names by @Gsantomaggio in #177
New Contributors
- @Hawxy made their first contribution in #164
- @PaoloLaurenti made their first contribution in #166
Full Changelog: v1.0.0-rc.5...v1.0.0-rc.6