当我发现持久连接已关闭时,如何有效地重新连接到外部数据库?如果ExtClient
丢失连接,它将返回err
上的“损坏的管道”。什么是重新连接外部数据库的良好模式?
func ListenForWork(cmdChannel <-chan *WorkCmd) {
for {
cmd, ok := <- cmdChannel
if !ok {
break
}
for { // Retry request until it's OK (`Broken pipe error` might destroy it)
_, err := ExtClient.Request(cmd.Key, cmd.Value)
if err == nil {
break
}
}
}
}
如何从这个或另一个方法以有效的方式重新连接?此代码的任何改进也是受欢迎的。 ExtClient
不会自行重新连接,并且是全局变量。
是的,客户端库很蠢,我不想讨论那个特定的库。那么司机是否应该重新连接。也许就是这么简单。请求方法在我这样做之前知道错误,我想它也可以做一些事情。 – Gustav 2013-03-14 13:00:27