RabbitMQ鼠兔,异常,连接关闭

9njqaruj  于 2023-02-08  发布在  RabbitMQ
关注(0)|答案(4)|浏览(289)

我试着用RabbitMQ发送和接收消息。我没有计算机科学背景,我使用的术语不可能很准确。
我尝试复制教程文件:当提交我的html表单时,我的python脚本(cgi)将消息提交到队列

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
        channel = connection.channel()
        channel.queue_declare(queue='task_queue', durable=True)
        message = PN
        channel.basic_publish(exchange='',
                              routing_key='task_queue',
                              body=message,
                              properties=pika.BasicProperties(
                                 delivery_mode = 2, # make message persistent
                              ))
        connection.close()

我的接收器正在运行:

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')

def callback(ch, method, properties, body):
    print(" [x] Received Project %r" % body)
    #ch.basic_ack(delivery_tag = method.delivery_tag) 
    if not (os.path.isfile(js_path)):
        print (' [*] ERROR files missing ')
        #ch.basic_ack(delivery_tag = method.delivery_tag)
        return
    p= subprocess.Popen(run a subprocess here)
    p.wait()

    print (' [*] Temporary Files removed')
    print(" [*] Waiting for messages. To exit press CTRL+C")

channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,queue='task_queue',no_ack=True)
channel.start_consuming()

它管理的大部分时间,但随机崩溃与以下错误:

Traceback (most recent call last):
   File "Receive5.py", line 139, in <module>
    channel.start_consuming()   
   File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 1681, in start_consuming
    self.connection.process_data_events(time_limit=None)
   File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 647, in process_data_events
    self._flush_output(common_terminator)
   File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 426, in _flush_output
    raise exceptions.ConnectionClosed() pika.exceptions.ConnectionClosed
aiazj4mn

aiazj4mn1#

这是因为您让主线程处于等待状态,因此pika无法处理传入消息;在这种情况下,在子进程完成之前,它无法响应心跳。2这会导致RabbitMQ认为客户端已经死了,并强制断开连接。
如果你想让它与心跳一起工作(推荐),你需要定期调用connection.process_data_events,这可以通过添加一个循环来检查线程是否完成,每隔30秒左右调用process_data_events直到线程完成。

w8biq8rn

w8biq8rn2#

这是一个关于如何避免由于心跳而导致连接中断的pika文档。
https://pika.readthedocs.io/en/stable/examples/heartbeat_and_blocked_timeouts.html
在pika 0.11.2之前的版本中,尽管我们可以在pika中添加一个参数。ConnectionParameters:heartbeat_interval=600,但如果服务器端心跳值较短,为60s,则没有帮助,需要0.11.2以上版本才能起作用

qeeaahzv

qeeaahzv3#

看添加这个https://github.com/mosquito/aio-pika
这是一个异步 Package 器,如果你理解异步背后的概念,很容易用途:)

pvabu6sv

pvabu6sv4#

它似乎没有连接到127.0.0.1:5672上的RabbitMQ--您确定RabbitMQ正在运行并侦听www.example.com吗127.0.0.1:5672?

适用于linux(debian)用户

您可以通过键入以下命令来检查是否安装了RabbitMQ。
sudo service rabbitmq-server status
如果你得到一个响应,这意味着它已经安装。检查它是否正在运行或没有?
启动rabbitMQ服务类型
sudo service rabbitmq-server start
要重新启动rabbitMq,请使用以下命令
sudo service rabbitmq-server restart
没有响应意味着您没有安装Rabbitmq。通过输入以下命令安装它。
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get install rabbitmq-server
然后通过键入上面的start命令启动服务器。

相关问题