2016-05-06 52 views
1

嘗試使用Python將數據發送到RabbitMQ隊列。Python Pika和RabbitMQ連接發佈

我還沒有配置服務器,但它正在運行其他進程。我有一個工作登錄,可以毫無問題地訪問Web輸出。

的示例代碼的RabbitMQ給出了Python使用鼠兔:

#!/usr/bin/env python 
import pika 

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host='xxx.xxx.xxx.xxx:xxxxx')) 
channel = connection.channel() 

channel.queue_declare(queue='Test') 

channel.basic_publish(exchange='', 
         routing_key='hello', 
         body='Hello World!') 
print(" [x] Sent 'Hello World!'") 
connection.close() 

這將運行並踢我了與:

pika.exceptions.ConnectionClosed 

沒有太多去,但安全的假設是登錄的問題,因爲示例代碼沒有任何登錄信息。

所以我加了它。

import pika 
import sys 
try: 

    credentials = pika.PlainCredentials('username', 'password') 


    connection = pika.BlockingConnection(pika.ConnectionParameters('xxx.xxx.xxx.xxx', 
              xxxxx, 
              'virtualhostnamehere', 
              credentials,)) 

    channel = connection.channel() 
    channel.queue_declare(queue='Test') 

    channel.basic_publish(exchange='amq.direct', 
          body='Hello World!') 
    print(" [x] Sent 'Hello World!'") 
except: 
    e = sys.exc_info()[0] 
    print e 

這似乎給了我前流連了好幾分鐘:

<class 'pika.exceptions.IncompatibleProtocolError'> 

服務器運行的其他服務很好,但我似乎無法找出什麼我做錯了。

登錄是正確的。虛擬主機名稱是正確的。主持人是正確的。交換名稱是正確的。

希望在正確的方向上的一個點。

更新:

我試過使用URLParameters以及相同的結果。

parameters = pika.URLParameters('amqp://username:[email protected]:xxxxx/notmyvhostname') 
connection = pika.BlockingConnection(parameters) 
+0

您正在使用哪個端口和用戶名? – cantSleepNow

+0

我用「用戶名」和「密碼」替代了登錄名,端口號爲xxxxx。 – PoweredByCoffee

+0

但我猜這個端口不會改變任何東西。它的端口是15672,登錄和瀏覽器輸出一樣。 – PoweredByCoffee

回答

3

但我猜的端口不會改變任何東西。它的端口15672和 登錄與我用於瀏覽器輸出時的相同。

使用端口5672 - 或者您爲AMQP監聽器設置的任何默認端口。端口15672用於Web UI訪問,通過HTTP完成,因此不兼容的協議錯誤

+0

我已經嘗試了三個不同的庫和一些有趣的方法來HTTP API和更改端口做到了。那麼它仍然不會寫頻道正在關閉,但它至少連接。感謝那種愚蠢的感覺,我沒有早點想到它。 – PoweredByCoffee

+0

Np - 發生在我們所有人身上;) – cantSleepNow

相關問題