Bug fixes
- Split user and internal commands buffers
Added support for RabbitMQ 3.13, with Route, Partitions and SuperStreams support.
- Support for
:consumerupdate
,:exchangecommandversions
,:streamstats
, commands. - Serialization options for encoding and decoding messages.
- TLS Support
- Functional
single-active-consumer
. - Initial support for
:filter_value
consumer parameter, and:createsuperstream
,:deletesuperstream
,:route
,:partitions
commands. - Initial support for SuperStreams, with RabbitMQStream.SuperConsumer and RabbitMQStream.SuperPublisher.
- Added
handle_message/1
callback for processing messages individually, ignoring messages happened before the minimal:offset
exepected by the consumer, and the messages that don't match the:filter_value
, as documented on the blog post
The 'Message' module tree was refactored to make all the Encoding and Decoding logic stay close to each other.
- Improved the cleanup logic for closing the connection.
- Publishers and Consumers now expects any name of a GenServer process, instead of a Module.
- Added checks on supported commands based on Server version, and exchanged commands versions.
- Renamed
RabbitMQStream.Subscriber
toRabbitMQStream.Consumer
- Renamed
RabbitMQStream.Publisher
toRabbitMQStream.Producer
- Each Deliver action made by the connection is now done with a `{:deliver, %RabbitMQStream.Message.Types.DeliverData{}} tuple
- Offset Tracking now prefers to use CommitedOffset when available
- The
handle_chunk/1
callback no longer receives decoded messages. It must be done manually by the user.
Added an implementation for a stream Consumer, fixed bugs and improved the documentation.
- Added the
:credit
command. - Added
RabbitMQStream.Subscriber
, which subscribes to a stream, while tracking its offset and credit based on customizeable strategies. - Added the possibility of globally configuring the default Connection for Publishers and Subscribers
- Fixed an issue where tcp packages with multiple commands where not being correctly parsed, and in reversed order
RabbitMQStream.Publisher
no longer callsconnect
on the Connection during its setup.- Moved
RabbitMQStream.Publisher
's setup logic intohandle_continue
, to prevent locking up the application startup. RabbitMQStream.Publisher
no longer declares the stream if it doesn't exists.RabbitMQStream.Publisher
module now can optionally declare abefore_start/2
callback, which is called before it callsdeclare_publisher/2
, and can be used to create the stream if it doesn't exists.RabbitMQStream.Connection
now buffers the requests while the connection is not yet:open
.
- Subscription deliver messages are now in the format
{:chunk, %RabbitMQ.OsirisChunk{}}
.
Documentation and Configuration refactoring
- It is now possible to define the connection and subscriber parameters throught the
config.exs
file - Documentation improvements, and examples
The main objective of this release is to remove the manually added code from rabbitmq_stream_common
's Erlang implementation of Encoding and Decoding logic, with frame buffering.
Initial release with the following features:
- Opening connection to RabbitMQ server
- Declaring a Stream
- Creating a Stream Publisher
- Subscribing to Stream Messages
- Initial Hex Release