最近開始使用rabbitmq,因為不了解,浪費了不少時間,記錄如下:
使用場景:服務器(linux)上部署了一個app1模塊,該模塊向rabbitmq發送消息,我想讓這個模塊的消息發送到我本地(windows)
遇到問題:為實現使用場景中的目的,因此將app1中配置的rabbitmq的ip地址改成了我本地的ip,用戶名和密碼都是guest,最后發現連接失敗,直接報如下錯誤:
nested exception is com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
解決問題:
嘗試1:創建新用戶
從網上查了一下,原因如下:賬號guest具有所有的操作權限,並且又是默認賬號,出於安全因素的考慮,guest用戶只能通過localhost登陸使用,並建議修改guest用戶的密碼以及新建其他賬號管理使用rabbitmq(該功能是在3.3.0版本引入的)。
因此,新建了一個用戶admin,密碼也是admin,並開啟了所有權限(可參考:https://www.linuxidc.com/Linux/2014-10/107917.htm),將app1配置文件中的用戶名和密碼也進行了相應的修改,如下所示:
#=====================rabbitmq================================
rabbit.mq.host=192.168.40.140
rabbit.mq.username=admin
rabbit.mq.password=admin
rabbit.mq.event.add.name=event
rabbit.mq.event.update.name=eventupdate
rabbit.mq.event.mail.name=eventmail
結果仍然報錯,再查,說是rabbitmq的配置文件需要改一下(仍參考上個網址),改完還是報同樣的錯,最后在app1中查詢了一下代碼,發現配置文件中配置的
rabbit.mq.username和rabbit.mq.password,即rabbitmq的用戶名和密碼並沒有使用,rabbit初始化連接的代碼如下
public void init() throws Exception{ factory = new ConnectionFactory(); factory.setAutomaticRecoveryEnabled(true); factory.setExceptionHandler(new RabbitMqExcetionHandler()); factory.setHost(rabbitmqHost); connection = factory.newConnection(); channel = connection.createChannel(); }
既然沒有用到用戶名和密碼,那默認應該使用的是guest用戶,因此,嘗試開啟guest遠程訪問
嘗試2:嘗試開啟guest遠程訪問(請參考:https://www.cnblogs.com/mingaixin/p/4134920.html)
開啟guest遠程訪問的方法是:將rabbitmq安裝目錄下ebin目錄下rabbit.app中loopback_users里的<<"guest">>刪除,重啟rabbitmq服務,結果成功了