文章目錄
erlang 降版的步驟
這幾天有台與 partner 介接用的 server 異常,造成 rabbitmq 無法連線,團隊在這類的 service 安裝腳本一直透過 ansible 管理,安裝上很順利,只是安裝後 .NET application 卻無法成功連線 (提示可能是 auth fail),但透過 rabbitmqadmin 測試又一切正常,原本以為是帳號權限、vhost 或是 topic permission 設定錯誤,最後使用 amidn 仍無法成功,最後才發現是 erlang 版本的問題,這時候才想起來之前也遇到相同問題:APT 安裝指定版本套件
檢查了 ansible,看似沒問題,推測可能是 ansible 原本設定 preferences
中的版本已經不存在,所以才會安裝最新版
有幾組 server 都有相同問題,所以快速紀錄一下降版的步驟,以免下次再遇到相同問題時,又要花時間回憶XD
基本環境說明
- Linux (ubuntu 22.04)
- erlang-nox 1:25.3.2.2-1
- rabbitmq-server 3.11.28-1
.NET 錯誤訊息
RabbitMQ.Client.Exceptions.OperationInterruptedException: The AMQP operation was interrupted: AMQP close-reason, initiated by Library, code=0, text='End of stream', classId=0, methodId=0, cause=System.IO.EndOfStreamException: Reached the end of the stream. Possible authentication failure. at RabbitMQ.Client.Impl.InboundFrame.ReadFrom(Stream reader, Byte[] frameHeaderBuffer, ArrayPool`1 pool, UInt32 maxMessageSize) at RabbitMQ.Client.Impl.SocketFrameHandler.ReadFrame() at RabbitMQ.Client.Framing.Impl.Connection.MainLoopIteration() at RabbitMQ.Client.Framing.Impl.Connection.MainLoop() at RabbitMQ.Client.Impl.SimpleBlockingRpcContinuation.GetReply(TimeSpan timeout) at RabbitMQ.Client.Impl.ModelBase.ModelRpc(MethodBase method, ContentHeaderBase header, Byte[] body) at RabbitMQ.Client.Framing.Impl.Model._Private_ChannelOpen(String outOfBand) at RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.CreateNonRecoveringModel() at RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.CreateModel()
設定步驟
修改 preferences:
/etc/apt/preferences.d/erlang
Package: erlang* Pin: version 1:25.3.2.8-1 Pin-Priority: 1000
套用 preferences (option)
我沒套用,依然生效,提供給有需要的人參考
sudo apt policy
移除安裝錯誤的 26 版 erlang-*
sudo apt remove -y erlang-*
可以透過下面語法先確認安裝的 erlang 版本
apt list --install | grep erlang
更新套件清單
sudo apt update -y
安裝指定版本 erlang
這邊以
erlang-nox 25.3.2.28
為例sudo apt install erlang-nox=1:25.3.2.8-1 -y
先列所有可用版本,避免又選到已不存在的
sudo apt list erlang-nox -a
重新安裝 rabbitmq-server
因為前面 remove erlang 時, rabbitmq-server 有相依,所以會一併被移隱;這邊以
rabbitmq-server 3.11.28-1
為例sudo apt install rabbitmq-server=3.11.28-1 -y
心得
.NET library 拋出的訊息有些誤導,造成一開始花了不少時間在檢查 rabbitmq 相關設定,最後才發現是 erlang 版本的問題
另外我也搞不懂 .NET library 為什麼不支援 26 版的 erlang,我看 release note RC 已經是 February 15, 2023
的事了,或者可能是我沒有正確設定造成的XD 有空再來確認相關 issue 囉
參考資訊
文章作者 Yowko Tsai
上次更新 2023-12-26
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。