For those of you who might be interested in using ZeroMQ in Elixir, I converted the Erlang examples in the ZeroMQ “zguide” to Elixir. I used erl2ex (https://github.com/dazuma/erl2ex.git) to do the initial conversion, then did a bit of editing and testing. Most of these examples work. I was not able to convert a couple because they used a module that I could not find.
You can find these Elixir examples in the ZeroMQ “zguide” repository at https://github.com/booksbyus/zguide. Look in the examples/Elixir directory. See the README.md file for a summary of which examples seem to work and which do not.
Cool. Is there a mature zmq lib for erlang or Elixir right now. I looked at it a few years back to try to transition some services to Elixir but lots of stuff was missing then and I didn’t know nearly ebough to fix it.
Multipart messages were missing at the time I believe.
Thanks! Very timely, I was just looking at Hyperledger Sawtooth blockchain which uses zeromq and has SDKs for Python, Node, Java, C++, but not elixir so this will come in handy.
I’m curious, too. I looked just a little more closely. My understanding is really shallow, but, the following code in rrbroker.exs seems to handle multi-part messages:
def loop(frontend, backend) do
receive do
{:zmq, ^frontend, msg, flags} →
case(:proplists.get_bool(:rcvmore, flags)) do
true →
:erlzmq.send(backend, msg, [:sndmore])
false →
:erlzmq.send(backend, msg)
end
{:zmq, ^backend, msg, flags} →
case(:proplists.get_bool(:rcvmore, flags)) do
true →
:erlzmq.send(frontend, msg, [:sndmore])
false →
:erlzmq.send(frontend, msg)
end
end
loop(frontend, backend)
end
That example (rrbroker.exs) seems to work. But, I don’t know how it’s being done underneath in erlzmq (erlzmq2). Looks hopeful, though.