python - RabbitMQ:Pika 连接因对等错误而重置

标签 python python-2.7 rabbitmq pika

我在队列中收到的消息很大,回调函数需要 40-50 秒才能完成每条消息的处理。我在回调函数中有以下部分代码:

if ch.is_open:
    print "channel is open: ", ch.is_open
    print "Method delivery tag: ", method.delivery_tag
else:
    print "Channel is closed"

ch.basic_ack(delivery_tag = method.delivery_tag)

我总是会从 if 语句中得到打印结果,如下所示:

Channel is open: True
Method delivery tag: x #Some number

但是在打印语句后我收到以下错误,

  File "receive_vb.py", line 200, in <module>
    channel.start_consuming()
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 1822, in start_consuming
    self.connection.process_data_events(time_limit=None)
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 758, in process_data_events
    self._dispatch_channel_events()
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 521, in _dispatch_channel_events
    impl_channel._get_cookie()._dispatch_events()
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 1445, in _dispatch_events
    evt.body)
  File "receive_vb.py", line 180, in callback
    ch.basic_ack(delivery_tag = method.delivery_tag)
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 2031, in basic_ack
    self._flush_output()
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 1292, in _flush_output
    *waiters)
  File "/usr/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 477, in _flush_output
    result.reason_text)
pika.exceptions.ConnectionClosed: (-1, "error(104, 'Connection reset by peer')")

对于第一条消息本身。所以我尝试在没有 basic_ack 的情况下运行,消息被处理并在不同的消息中随机遇到错误。第 2 条消息、第 474 条消息、第 181 条消息等等。

我尝试设置 heartbeat_interval = 0 和一些大数字,例如 heartbeat_interval =150 没有任何结果。我该如何解决这个问题。提前致谢

以下是RabbitMQ日志

=INFO REPORT==== 5-Jul-2019::03:58:56 ===
accepting AMQP connection <0.17625.50> (10.168.37.108:45318 -> 10.168.37.108:5672)

=INFO REPORT==== 5-Jul-2019::03:58:56 ===
connection <0.17625.50> (10.168.37.108:45318 -> 10.168.37.108:5672): user 'guest' authenticated and granted access to vhost '/'

=ERROR REPORT==== 5-Jul-2019::03:59:26 ===
closing AMQP connection <0.17625.50> (10.168.37.108:45318 -> 10.168.37.108:5672):
{writer,send_failed,{error,timeout}}

最佳答案

您的消息太大,无法在 RabbitMQ 中的 TCP 写入超时之前通过网络发送:

{writer,send_failed,{error,timeout}}

您应该压缩消息以使其更小,或将它们分成多条消息。您的网络可能重载,或者您的服务器重载。或者,可能存在其他网络或服务器问题,阻碍消息的快速传递 - 这里没有足够的信息来诊断它。

作为最后的手段,您可以通过 tcp_listen_options.send_timeout 增加 RabbitMQ 的套接字写入超时,但这只会掩盖真正根本原因的症状。

关于python - RabbitMQ:Pika 连接因对等错误而重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56897613/

相关文章:

python - 在 Mac OS X 10.6.7、Python 2.7.1 上运行 Virtualenv 1.6 时

nservicebus - NServiceBus相对于普通RabbitMQ的特定优势

linux - erl与centos "Failed to create main carrier for ll_alloc"

python - Django Admin 中一对一字段的过滤结果

python - 使用 distutil 将 list 嵌入 C 扩展 dll

python - 在每个 "X"上分割一个字符串

python - 如何在python中增加列表的名称

python - protobuf python找不到包含

python - Pandas 卡住列名

java - Spring rabbitmq 如何在错误处理程序上手动确认,在抛出特定的必需异常时,它仅在 Acknowledge 设置为 AUTO 时确认