求助(附代码):rabbitmq:Exception (504) Reason: "channel/connection is not open"

JGbooks · · 7324 次点击
**解决办法** >跑了3个小时了 目前没有发现连接断开。我先总结下这次优化的问题。 ![image.png](https://static.studygolang.com/190428/3673dbfbf3e965b2d905f10486d72d94.png) 看到客户端连接rabbitmq 有closed 字段用来检验是断开连接。源码中也使用closed 字段检查连接性。于是发现AMQP的管道同样有一个closed。于是参考源码封装出来判断连接的函数。 ``` connect.go func (c *Connection) IsClosed() bool { return (atomic.LoadInt32(&c.closed) == 1) } channel.go func (c *Channel) IsClosed() bool { return (atomic.LoadInt32(&c.closed) == 1) } ``` 修改重连为: ``` if conn.IsClosed() || ch.IsClosed() { log.Println("连接断开,重新连接") err = InitRabbitmq(Url) log.Println(err) } ``` **修改后稳定性增强,自己的问题没有仔细看源码。**
#3
更多评论
找到一个和我类似的错误:http://www.itkeyword.com/doc/8522470228588686135/golang-rabbitmq-channel-connection-is-not-open 我将代码中的close 关闭了也是一样的。
#1
发现问题了,逻辑问题。对源码研究不够。下面分析一下自己的问题
#2