python使用pika订阅rabbitmq消息链接被重置问题

最近在做一个运维监控系统的时候,使用python的pika插件订阅rabbitmq消息,程序在运行一段时间后,总是会报链接被充值的错误,具体报错如下:

Traceback (most recent call last):
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 1041, in _on_socket_readable
    self._consume()
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 791, in _consume
    data = self._sigint_safe_recv(self._sock, self._MAX_RECV_BYTES)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 79, in retry_sigint_wrap
    return func(*args, **kwargs)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 846, in _sigint_safe_recv
    return sock.recv(max_bytes)
ConnectionResetError: [Errno 104] Connection reset by peer
Traceback (most recent call last):
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 1041, in _on_socket_readable
    self._consume()
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 791, in _consume
    data = self._sigint_safe_recv(self._sock, self._MAX_RECV_BYTES)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 79, in retry_sigint_wrap
    return func(*args, **kwargs)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/utils/io_services_utils.py", line 846, in _sigint_safe_recv
    return sock.recv(max_bytes)
ConnectionResetError: [Errno 104] Connection reset by peer
2020-02-06 21:07:50,955 - INFO - _AsyncTransportBase._initate_abort(): Initiating abrupt asynchronous transport shutdown: state=1; error=ConnectionResetError(104, 'Connection reset by peer'); <socket.socket fd=6, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('192.168.167.205', 34796)>
2020-02-06 21:07:50,955 - INFO - Deactivating transport: state=1; <socket.socket fd=6, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('192.168.167.205', 34796)>
2020-02-06 21:07:50,956 - ERROR - connection_lost: StreamLostError: ("Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')",)
2020-02-06 21:07:50,956 - INFO - AMQP stack terminated, failed to connect, or aborted: opened=True, error-arg=StreamLostError: ("Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')",); pending-error=None
2020-02-06 21:07:50,957 - INFO - Stack terminated due to StreamLostError: ("Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')",)
2020-02-06 21:07:50,957 - INFO - Closing transport socket and unlinking: state=2; <socket.socket fd=6, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('192.168.167.205', 34796)>
2020-02-06 21:07:50,957 - ERROR - Unexpected connection close detected: StreamLostError: ("Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')",)
/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pymysql/cursors.py:170: Warning: (1265, "Data truncated for column 'alert_msg' at row 1")
  result = self._query(query)
Traceback (most recent call last):
  File "alert_engine/server.py", line 66, in <module>
    channel.start_consuming()
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 1866, in start_consuming
    self._process_data_events(time_limit=None)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 2027, in _process_data_events
    self.connection.process_data_events(time_limit=time_limit)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 825, in process_data_events
    self._flush_output(common_terminator)
  File "/home/hadoop/.virtualenvs/alert-manager/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 522, in _flush_output
    raise self._closed_result.value.error
pika.exceptions.StreamLostError: Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')

经过排查,该问题主要原因是 pika客户端与服务端超过15分钟未进行通信,虽然pika客户端与服务端在服务器上简历了连接,但是由于服务器HTTP的策略是超过15分钟后,服务器端建立的连接会被改策略清楚掉,连接就被清除了,导致服务端与客户端断开连接,因此会报链接呗重置了
经过测试,此问题根本原因如下,发生原因是由于我关闭的pika客户端与服务端的心跳机制,这样关闭了,客户端与服务端的定时通信机制,因此,在长时间无数据时,pika客户端与服务端尝试加不通信,所以导致了问题的发生,所以在pika订阅rabbitmq消息时,不应该关闭pika客户端与rabbitmq的心跳机制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值