README.md

# RabbitMQStream - WIP

[![Version](https://img.shields.io/hexpm/v/rabbitmq_stream.svg)](https://hex.pm/packages/rabbitmq_stream)
[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/rabbitmq_stream/)
[![Download](https://img.shields.io/hexpm/dt/rabbitmq_stream.svg)](https://hex.pm/packages/rabbitmq_stream)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

Elixir Client for [RabbitMQ Streams Protocol](https://www.rabbitmq.com/streams.html).

## Getting started

This project is currently under development and missing most of the features a full client needs. The current aim is to make it feature complete before writting a _Getting started_ documentation.

## Progress

This implementation is following the protocol defined in the RabbitMQ's repository, seen [here](https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbitmq_stream/docs/PROTOCOL.adoc).

Here is the set of messages with handlers currently implemented:

| Command                | Status | Description                               |
| ---------------------- | ------ | ----------------------------------------- |
| DeclarePublisher       | ✅     | --                                        |
| Publish                | ✅     |
| PublishConfirm         | ✅     |
| PublishError           | ✅     |
| QueryPublisherSequence | ✅     | --                                        |
| DeletePublisher        | ✅     | --                                        |
| Subscribe              | ⏳     |
| Deliver                | ⏳     |
| Credit                 | ⏳     |
| StoreOffset            | ✅     | Stores a stream offset under given `name` |
| QueryOffset            | ✅     | Retrieves a stored offset                 |
| Unsubscribe            | ⏳     |
| Create                 | ✅     | Create a Stream                           |
| Delete                 | ✅     | Delete a Stream                           |
| Metadata               | ✅     | --                                        |
| MetadataUpdate         | ✅     | --                                        |
| PeerProperties         | ✅     | --                                        |
| SaslHandshake          | ✅     | --                                        |
| SaslAuthenticate       | ✅     | --                                        |
| Tune                   | ✅     | --                                        |
| Open                   | ✅     | --                                        |
| Close                  | ✅     | --                                        |
| Heartbeat              | ✅     | --                                        |

## Roadmap

- [_Well-behaved_](https://blog.rabbitmq.com/posts/2021/07/connecting-to-streams/#:~:text=Well%2Dbehaved%20Clients) Cluster connection
- Workaround for connecting throught [load balancers](https://blog.rabbitmq.com/posts/2021/07/connecting-to-streams#:~:text=Client%20Workaround%20With%20a%20Load%20Balancer)

## Future Plans

- Broadway Producer implementation using this client.