我在AWS EC2上运行了RabbitMQ服务器 我在本地运行了生产者和消费者代码。这是工作。 我也可以访问rabbitMQ管理网络应用程序。
当我尝试将数据从笔记本电脑推送到EC2时 我在这一行上收到了这个错误:
connection = pika.BlockingConnection(pika.ConnectionParameters('xx.xx.xx.xx',5672,'/',credentials))
文件" /usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py",第339行, init self._process_io_for_connection_setup() 文件" /usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py",第374行,在_process_io_for_connection_setup中 self._open_error_result.is_ready) 文件" /usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py",第395行,在_flush_output中 引发异常.ConnectionClosed() pika.exceptions.ConnectionClosed
其中xx.xx.xx.xx:我的实例的公共IP地址
请告诉我,如果我使用的是正确的参数。应该是什么IP地址,虚拟主机名。 我检查了凭据,我使用的用户存在,并且它有权访问' /'虚拟主机
我已在安全组中进行了必要的更改。 这是它的截图:
当我在实例中运行相同的生产者代码时,它正常工作。没有例外,消费者也能够接收它。
这是我的完整代码供参考:
import pika
print("Start")
credentials=pika.PlainCredentials('manish','manish')#RabbitMQ user created on EC2
connection=pika.BlockingConnection(pika.ConnectionParameters('xx.xx.xx.xx',5672,'/',credentials))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
答案 0 :(得分:0)
我尝试了socket_timeout
并且它对我有用,你可以尝试类似:
credentials = pika.PlainCredentials('username,'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('hostname',port,'virtual host',credentials,**socket_timeout=10000**))