记录一下,
最近在用机器学习打算做一个Rest API, 数据存入mongo,任务采用消息队列,rabbitmq
由于引擎采用python编写,所以WEB也直接打算用python编写了,比较省事。
WEB采用flask,连接rabbitmq使用pika,但是在链接过程中,无论是消费还是生产,只要过了一段时间就会主动断链,
提示:
Connection reset by peer
其实原因很简单,服务端没有收到客户端的心跳包,默认是10秒,但是预计的已经超过10秒还没有发心跳包,所以服务端主动断连了。
解决的办法:
py2的代码:
def __init__(self, # pylint: disable=R0913,R0914,R0912 host=_DEFAULT, port=_DEFAULT, virtual_host=_DEFAULT, credentials=_DEFAULT, channel_max=_DEFAULT, frame_max=_DEFAULT, heartbeat=_DEFAULT, ssl=_DEFAULT, ssl_options=_DEFAULT, connection_attempts=_DEFAULT, retry_delay=_DEFAULT, socket_timeout=_DEFAULT, locale=_DEFAULT, backpressure_detection=_DEFAULT, blocked_connection_timeout=_DEFAULT, client_properties=_DEFAULT, tcp_options=_DEFAULT, **kwargs): """Create a new ConnectionParameters instance. See `Parameters` for default values. :param str host: Hostname or IP Address to connect to :param int port: TCP port to connect to :param str virtual_host: RabbitMQ virtual host to use :param pika.credentials.Credentials credentials: auth credentials :param int channel_max: Maximum number of channels to allow :param int frame_max: The maximum byte size for an AMQP frame :param int heartbeat: Heartbeat timeout. Max between this value and server's proposal will be used as the heartbeat timeout. Use 0 to deactivate heartbeats and None to accept server's proposal. :param bool ssl: Enable SSL :param dict ssl_options: None or a dict of arguments to be passed to ssl.wrap_socket :param int connection_attempts: Maximum number of retry attempts :param int|float retry_delay: Time to wait in seconds, before the next :param int|float socket_timeout: Use for high latency networks :param str locale: Set the locale value :param bool backpressure_detection: DEPRECATED in favor of `Connection.Blocked` and `Connection.Unblocked`. See `Connection.add_on_connection_blocked_callback`. :param blocked_connection_timeout: If not None, the value is a non-negative timeout, in seconds, for the connection to remain blocked (triggered by Connection.Blocked from broker); if the timeout expires before connection becomes unblocked, the connection will be torn down, triggering the adapter-specific mechanism for informing client app about the closed connection ( e.g., on_close_callback or ConnectionClosed exception) with `reason_code` of `InternalCloseReasons.BLOCKED_CONNECTION_TIMEOUT`. :type blocked_connection_timeout: None, int, float :param client_properties: None or dict of client properties used to override the fields in the default client properties reported to RabbitMQ via `Connection.StartOk` method. :param heartbeat_interval: DEPRECATED; use `heartbeat` instead, and don't pass both :param tcp_options: None or a dict of TCP options to set for socket """
在py3:ConnectionParameters设置heartbeat_interval=0即可。
在py2:ConnectionParameters设置heartbeat=0即可。