Skip to content

Releases: rabbitmq/rabbitmq-stream-dotnet-client

v1.3.0-beta-1

29 Mar 14:49
v1.3.0-beta.1
c1b9961
Compare
Choose a tag to compare
v1.3.0-beta-1 Pre-release
Pre-release

GitHub Milestone

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

New Contributors

Full Changelog: v1.2.0...v1.3.0-beta.1

v1.2.0

14 Feb 08:50
v1.2.0
f0ea2a7
Compare
Choose a tag to compare

GitHub Milestone

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

31 Jan 13:30
v1.1.1
b5bfe4c
Compare
Choose a tag to compare

GitHub Milestone

The client is distributed via NuGet.

Enhancements

Full Changelog: v1.1.0...v1.1.1

v1.1.0

23 Jan 07:57
v1.1.0
aac7819
Compare
Choose a tag to compare

GitHub Milestone

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

16 Jan 08:46
v1.0.2
e458aff
Compare
Choose a tag to compare

GitHub Milestone

The client is distributed via NuGet.

What's Changed

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't Properties / ApplicationProperties

Full Changelog: v1.0.1...v1.0.2

v1.0.1

10 Jan 09:34
v1.0.1
f6efcc8
Compare
Choose a tag to compare

GitHub Milestone

The client is distributed via NuGet.

Enhancements

Full Changelog: v1.0.0...v1.0.1

v1.0.0

19 Dec 16:10
v1.0.0
05e33ae
Compare
Choose a tag to compare

GitHub Milestone

The client is distributed via NuGet.

Breaking changes

Enhancements

Full Changelog: v1.0.0-rc.8...v1.0.0

v1.0.0-rc.8

24 Nov 09:35
v1.0.0-rc.8
157cd79
Compare
Choose a tag to compare

GitHub Milestone

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

15 Nov 10:52
v1.0.0-rc.7
656fcaa
Compare
Choose a tag to compare

GitHub Milestone

The client is distributed via NuGet.

Note

This release contains important performance improvements.

Enhancements

New Contributors

Full Changelog: v1.0.0-rc.6...v1.0.0-rc.7

v1.0.0-rc.6

02 Nov 10:32
v1.0.0-rc.6
95d05b8
Compare
Choose a tag to compare

GitHub Milestone

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 and
    RawSuperStreamProducer
    - 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 to v1.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("") <-- raises ArgumentException

  • Questions:

    Q: Why the Producer/Consumer classes are not provided directly by system?
    A: We'd like to leave the low-level classes as easy as possible. A user can implement a similar Producer starting from RawProducer
    and RawSuperStreamProducer as we did.

    Q: Which classes should I use?
    A: We suggest using Producer/Consumer classes

    Q: 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
    the Producer under certain situations since it doesn't have to handle the sent/received messages.

Release notes

Enhancements

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

New Contributors

Full Changelog: v1.0.0-rc.5...v1.0.0-rc.6