• rebbitmq之python_pika监控远程连接及自动恢复(七)


    前言

    客户端连接rabbitmq后,如果长时间没有数据的传输,rabbitmq会申请关闭TCP连接,造成该TCP连接下的所有的信道都不可用,很多时候为了传输数据的高效率,我们会先创建一个信道池,这样省去了每次数据传输连接和释放连接的时间,但由于rabbitmq可能会远程关闭连接,因此需要判断连接池中的通道是否还有效;

    判断TCP连接和channel

    import pika
    # 首先创建一个TCP连接
    # 添加用户名和密码
    credentials = pika.PlainCredentials(self.__username, self.__passwd)
    # 配置连接参数
    parameters = pika.ConnectionParameters(host=self.__host,
                                            port=self.__port,
                                            credentials=credentials)
    # 创建一个连接对象
    connection = pika.BlockingConnection(parameters)
    # 创建一个信道
    channel = connection.channel() 
    
    

    connection和channel的重要方法

    • connection.is_closed:判断当前的TCP是否关闭,如果是关闭返回True,如果处于连接状态,返回False;

    • connection.is_closing:判断当前的TCP连接已发起关闭,但关闭还没有完成的状态,如果是关闭返回True,如果处于连接状态,返回False;

    • connection.is_open:判断当前的TCP连接是否打开,打开返回True,关闭返回False;

    • channel.is_open:判断当前的channel是否打开,打开返回True,关闭返回False;

    • channel.is_closed:判断当前的channel是否打开,如果是关闭返回True,如果打开返回False

    注意

    1. connection关闭后,该连接下面的所有的channel都会关闭;

    2. is_closed和is_open这种函数只能判断客户端的连接是否打开或关闭,但是无法判断服务端连接的状态,所以当服务端远程关闭了连接时,客户端是不能感知到的;

    3. 可以设置心跳用来自动关闭异常的TCP连接;

    4. 如果服务端远程关闭了连接,当客户端发送消息时,捕捉异常并重新建立连接;

    参考

  • 相关阅读:
    [HAOI2014]贴海报
    【模板】高斯消元法
    2015FAI
    ASP.NET网站图标,始终不显示是怎么回事
    小说自动生成项目
    电脑写小说可行吗?(四)情绪的本质
    电脑写小说可行吗?(三)智能体
    电脑写小说可行吗?(二)情感理论
    电脑写小说可行吗? (一)电脑能做什么
    留言板
  • 原文地址:https://www.cnblogs.com/cwp-bg/p/8474396.html
Copyright © 2020-2023  润新知