您的位置:首页 > 其它

pika判断rebbitmq远程连接及自动恢复

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

判断TCP连接和channel

当前使用pika模块操作rabbitmq

# 首先创建一个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.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

注意

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

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

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

如果服务端远程关闭了连接,当客户端发送消息时,捕捉异常并重新建立连接;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐