gmile
Issue with using "amqp" package after upgrading to OTP26
After upgrading to OTP26, our app that uses amqp package fails to establish a connecting to RabbitMQ server, and I am failing to understand why. Connecting to OTP25 works fine.
# OTP25
AMQP.Connection.open("amqp://guest:guest@amqp-issue-rabbitmq")
{:ok, %AMQP.Connection{pid: #PID<0.241.0>}}
# OTP26
AMQP.Connection.open("amqp://guest:guest@amqp-issue-rabbitmq")
# => {:error, {:auth_failure, 'Disconnected'}}
I have a hunch this must be related to recent changes to SSL-specific defaults in OTP26. However, attempts to disable ssl_options doesn’t work either - it fails with another error, so I must be passing the options in a wrong way. For example, this fails:
AMQP.Connection.open("amqp://guest:guest@amqp-issue-rabbitmq", [ssl_options: :none])
# => {:error, :econnrefused}
Reproduction details
The reproduce script is this one:
# sample.bash
mix do local.hex --force, local.rebar --force
elixir -e 'Mix.install([:amqp]); AMQP.Connection.open("amqp://guest:guest@amqp-issue-rabbitmq") |> IO.inspect()'
The full reproduce experiment is this one:
docker network create amqp-issue
docker run \
--rm \
--name amqp-issue-rabbitmq \
--detach \
--network amqp-issue \
rabbitmq:3.11.16-alpine
sleep 5 # give rabbitmq enough time to fully initialize
docker run \
--rm \
--name amqp-issue-otp25 \
--network amqp-issue \
--mount type=bind,source=$(realpath sample.bash),target=/tmp/sample.bash \
hexpm/elixir:1.14.1-erlang-25.1.2-alpine-3.16.2 \
ash /tmp/sample.bash
docker run \
--rm \
--name amqp-issue-otp25 \
--network amqp-issue \
--mount type=bind,source=$(realpath sample.bash),target=/tmp/sample.bash \
hexpm/elixir:1.14.4-erlang-26.0-alpine-3.18.0 \
ash /tmp/sample.bash
docker stop amqp-issue-rabbitmq
docker network rm amqp-issue
I haven’t dig too deep into amqp_client yet. Any ideas what might be preventing the connection and how to fix it? ![]()
Marked As Solved
Also Liked
cevado
you must probably need to have a version of the server that supports otp26
for reference
https://github.com/rabbitmq/rabbitmq-server/issues/7845
al2o3cr
The client implementation and the server share code, according to this note in that second Github issue:
Note that
rabbit_net:port_command/2is not only used by RabbitMQ server, but also by the AMQP 0.9.1 client. Therefore, instead of putting the OTP version (or send function) into persistent_term within the rabbit app, we just do it the first timerabbit_net:port_command/2is invoked.
gmile
Just updating the client worked, yes. I’m using cloudamqp too, and connecting using 3.12 client code appears to work now.
However, I only just did some quick tests. Haven’t deployed this yet.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









