evnu
Hi!
Some of you may have read the RabbitMQ announcement of Streams.
To quote the announcement:
A RabbitMQ stream models an append-only log with non-destructive consuming
semantics. This means that – contrary to traditional queues in RabbitMQ –
consuming from a stream does not remove messages.
As far as I can tell, there are currently a Java and Go client to connect to RabbitMQ streams, but no Erlang or Elixir client. To take Streams for a spin, we thus wrote a simple Erlang library called lake. The library misses features such as handling clustering, but it works to give streams a try from Erlang and Elixir. See the repository for a usage example.
I hope somebody here finds lake useful!
Trending in Announcing
The repo is at GitHub - cyberchitta/openai_ex: Community maintained Elixir library for OpenAI API · GitHub.
Docs are at OpenaiEx User Gu...
New
WebAuthnLiveComponent WebAuthnComponents
See this post about renaming the package.
Passwordless authentication for Phoenix LiveView app...
New
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
I released Doggo, a collection of unstyled Phoenix components.
https://github.com/woylie/doggo
Features
Unstyled Phoenix components....
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
I’ll shortly be launching Text, a nascent text analysis library.
Current functionality
In this early version (not ready for prime time) ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Other Trending Topics
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with.
But I don’t use it anymore.
Serverless was the promis...
New
What IDE or editor are you using for Elixir development?
Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #ai
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #metaprogramming










Showing Posts 1 to 5- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
evnu
Hi there!
I just released v0.2.0. With this release, all messages from the current protocol specification are supported. That also means that SuperStreams can now be used! The API of
lakeis very rough around the edges, but playing around with RabbitMQ Streams works.If you plan to play with SuperStreams, note that a SuperStreams need to be created outside of lake. The binary protocol does not have a command to create SuperStreams. Either use
rabbitmqctl, or seelake_SUITEfor how to create a SuperStream usingAMQP.msw10100
Thanks for writing this library, I look forward to playing with it from Elixir!
I’ve started rabbitmq with:
docker run -it --rm --name rabbitmq -p 5552:5552 -p 15672:15672 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS='-rabbitmq_stream advertised_host localhost -rabbit loopback_users "none"' rabbitmq:3.9-managementand enabled the Streams management plugin with:
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_stream_managementI can see in the RabbitMQ logs and admin that Streams are enabled. But the lake connect fails. I get an error on the RabbitMQ console of
unknown command. Here’s my code:And the error I get:
Any thoughts about what I might be doing wrong?
evnu
This is because of the RabbitMQ version. I tested lake’s
v0.2against RabbitMQ 3.11 to make use of SuperStreams. RabbitMQ 3.9 misses theEXCHANGE_COMMAND_VERSIONScommand. So, to work around this, use the option{:exchange_command_versions, false}when connecting. This is one of the things where the API of lake is still quite rough around the edges. The following should work:With that, you can take a look into lake’s lake_SUITE for some examples on using RabbitMQ Streams.
Note that the RabbitMQ 3.9 release series is EOL. When I run your docker command, I see the following (non-fatal) error message:
W.r.t. RabbitMQ 3.9 being EOL, maybe I should add a minimal RabbitMQ version supported by lake at some point in time. But a nicer API should have a higher priority.
msw10100
Awesome, @evnu, thanks! I totally should’ve checked RabbitMQ versions.
I’m now connecting and starting to play with the API. I’m not an erlang expert, just a few years of elixir, so I’m not super well-equipped to help you work on the API. I can read erlang well enough but haven’t had much call to write it. Playing with
lakemight motivate me to ramp up my erlang skills, though.Many thanks for the fast response and for getting me pointed in the right direction!
evnu
You don’t need to be an erlang expert to help out - I am mostly struggling with understanding what the API should “feel like”. So, if you have comments what feels wrong and what is harder than it should be, that information would be great!