iT邦幫忙

1

使用 python 連接 RabbitMQ 問題

  • 分享至 

  • xImage

各位好,我想請問一下
我開了一台虛擬機(IP 為 192.168.0.102),裡面有裝 RabbitMQ

我如果在實體機上輸入 http://192.168.0.102:15672/ 可以顯示畫面

我照著官網給的資訊寫了一小段程式,在實體機上,如下

因為我看官網寫的是 localhost 所以想說改成用虛擬機的 IP 192.168.0.102 嘗試看看,可是失敗了
請問要怎麼做才能從實體機連入虛擬機,有辦法嗎?

在虛擬機裡用 localhost 可以正常執行,沒問題

感謝


producer.py


import pika

# 連接 rabbitmq
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.0.102'))

# 頻道 控制對象
channel = connection.channel()

# 創建對列
channel.queue_declare(queue='hello')

# 向對指定列插入數據
channel.basic_publish(exchange='', # 簡單模式
                      routing_key='hello', # 指定對列
                      body='Hello World!') # 指定數據

print(" [x] Sent 'Hello World!'")

error message(在實體機上跑的結果)

Traceback (most recent call last):
  File "01_producer.py", line 5, in <module>
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.0.102'))
  File "C:\Users\pcymi\AppData\Local\Programs\Python\Python38\lib\site-packages\pika\adapters\blocking_connection.py", line 359, in __init__
    self._impl = self._create_connection(parameters, _impl_class)
  File "C:\Users\pcymi\AppData\Local\Programs\Python\Python38\lib\site-packages\pika\adapters\blocking_connection.py", line 450, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
pika.exceptions.ProbableAuthenticationError: ConnectionClosedByBroker: (403) 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.'
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
阿翔
iT邦新手 4 級 ‧ 2020-09-08 00:12:59
最佳解答

印象中 RabbitMQ 的 AMQP 是預設監聽在 5672 port,虛擬機的防火牆對外有開放 5672 port 嗎~?

yun1231 iT邦新手 3 級 ‧ 2020-09-08 00:24:30 檢舉

好像沒什麼改變(我執行 sudo ufw allow in 5672)

我有把錯誤訊息放在上面了,請在上去看一下!(一開始忘記放了)

阿翔 iT邦新手 4 級 ‧ 2020-09-08 10:14:01 檢舉

RabbitMQ 有設定帳號密碼嗎?
錯誤訊息可以看到最後一行顯示

(403) 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.'

看起來有連到但登入驗證沒有過,因此可以試著在程式裡面加入 PlainCredentials 進行驗證,官方的範例如下

在此附上官方文件

yun1231 iT邦新手 3 級 ‧ 2020-09-08 11:50:29 檢舉

可以傳送了,感謝(ノ>ω<)ノ

另外我剛有試出另一個方法,就是讓 guest 可以在實體機上登陸管理介面的話就可以不用再另外設定帳號,就能以最易開始的方式登入
/images/emoticon/emoticon07.gif

之前 guest 不能登入

1
黃彥儒
iT邦高手 1 級 ‧ 2020-09-07 22:14:26

我猜是你MQ只監聽localhost而不是0.0.0.0

yun1231 iT邦新手 3 級 ‧ 2020-09-07 22:57:23 檢舉

請問指的是 MQ 的 Server 默認只給 localhost 連嗎?
我如果是用 http://192.168.0.102:15672/ 這樣可以進去管理介面
不知道這兩個是不是沒有關係

我要發表回答

立即登入回答