当前位置: 首页 > wzjs >正文

城阳 网站建设网站团队介绍

城阳 网站建设,网站团队介绍,怎样做运营一个网站,网站一级页面标题怎么做的问题描述 今天遇到一个奇怪问题,我在初始化一个etcd客户端时,传入了一个错误的端点,然后就水灵灵的初始化成功了,没有触发err。 这直接导致后续的etcd操作永久阻塞,而且不利于错误排查。。。。 package mainimport…

问题描述

今天遇到一个奇怪问题,我在初始化一个etcd客户端时,传入了一个错误的端点,然后就水灵灵的初始化成功了,没有触发err。 

这直接导致后续的etcd操作永久阻塞,而且不利于错误排查。。。。

package mainimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""go.uber.org/zap""time"
)func main() {cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2378"},	// 传入一个错误端口2378DialTimeout: 5 * time.Second,})if err != nil {    // err为 nilfmt.Printf("clientv3.New() err: %v", err)return}}

 后来我查了一下,原因如下:

clientv3.New 在创建客户端时,不会立即验证端点的有效性或是否可连接,而是将验证推迟到实际使用客户端(比如执行 Put、Get 等操作)时。

err 为 nil 并不一定意味着端点是正确的,而是说明 clientv3.New 在初始化时没有检测到明显的配置错误。真正的连接问题可能在后续操作中暴露出来。

解决方式

我们在初始化完成之后,直接验证该端点的有效性。(类似于ping),如果验证出错就 return,验证正确就继续执行。

package mainimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""go.uber.org/zap""time"
)func main() {cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2378"}, // 传入一个错误端口2378DialTimeout: 5 * time.Second,})if err != nil {fmt.Printf("clientv3.New() err: %v", err)return}// 验证端点有效性ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)defer cancel()_, err = cli.Status(ctx, "127.0.0.1:2378")if err != nil {fmt.Printf("验证端点有效性失败 cli.Status() %v\n", err)cli.Close() // 记得关return}}

实际跑一下,输出如下:

{"level":"warn","ts":"2025-04-03T15:16:38.336886+0800","logger":"etcd-client","caller":"v3@v3.5.12/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0000f61c0/127.0.0.1:2378","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: connection error: desc = \"transport: Error while dialing: dial tcp 127.0.0.1:2378: connectex: No connection could be made because the target machine actively refused it.\""}
验证端点有效性失败 cli.Status() context deadline exceeded

第一行是clientv3内部自动输出的一条日志,其中描述了错误原因:Error while dialing: dial tcp 127.0.0.1:2378: connectex: No connection could be made because the target machine actively refused it

第二行则是我们手动输出的err,只描述了上下文超时错误。

这样一来,错误的端点就会在此被检查出来,我们就成功实现了验证。

但是,描述了错误原因的这条日志,他只是自动打印在控制台了,并不是打印在日志文件中,这样我们日后还是不方便排查问题,那我们如何将其打印在日志文件中呢?有需求的小伙伴可以继续往下看。 

将报错打印到日志文件

我们只需要在初始化客户端时,加入一个字段即可。


文章转载自:

http://OhIV70SB.zpLzj.cn
http://LkprZQgT.zpLzj.cn
http://7sjqWGtS.zpLzj.cn
http://4KelLWB7.zpLzj.cn
http://oAB0LNGF.zpLzj.cn
http://U7dC3Anl.zpLzj.cn
http://v8TmRVUq.zpLzj.cn
http://HQGabw9n.zpLzj.cn
http://dPDaNFl9.zpLzj.cn
http://CKYqMdy8.zpLzj.cn
http://RMUlIIQC.zpLzj.cn
http://qqhZKcWA.zpLzj.cn
http://ofNDfIU3.zpLzj.cn
http://RrJeNsSy.zpLzj.cn
http://S4ATRVBi.zpLzj.cn
http://47QIkUp6.zpLzj.cn
http://JFwuJ1M6.zpLzj.cn
http://93ItcEU7.zpLzj.cn
http://aTpVejHD.zpLzj.cn
http://AoLDIdsE.zpLzj.cn
http://ADJ4yBEa.zpLzj.cn
http://VX2doh57.zpLzj.cn
http://fm8I5y49.zpLzj.cn
http://DUtXbVKd.zpLzj.cn
http://xin9XnOg.zpLzj.cn
http://ILltS49K.zpLzj.cn
http://ZhO56cBa.zpLzj.cn
http://tSEPxmb2.zpLzj.cn
http://UrdsohEp.zpLzj.cn
http://RvAMmTXx.zpLzj.cn
http://www.dtcms.com/wzjs/640769.html

相关文章:

  • 公司网站建设收费站酷网网址
  • 网站运营岗位介绍自建平台
  • 西安专业做淘宝网站的公司做网站免费服务器哪家好
  • 长沙建设公司网站网站怎么免费做推广
  • 洛阳网站设计展厅宣传片
  • 查看一个网站的源代码做评价电脑可以做网站吗
  • 做特卖的网站雅美盛典wordpress商业模板破解
  • 杭州 兼职 网站建设如何注册一个域名
  • 电子商务网站建设的参考文献利鑫做彩票网站
  • 如何在网站上做跳转代码去除wordpress主题头部作者信息
  • 网站建设与管理是什么工作互联网金融网站建设
  • 广州seo网站设计公众号制作代运营
  • 湖北网站建设服务公司网站内容收费
  • 长春作网站诚信的小程序开发兼职网站
  • 婚纱摄影网站设计理念网站设计一个页多少钱
  • 想自己做网站怎么做软件开发中需要哪些可行性分析
  • 集团网站风格Dw制作个人网站
  • 柳城企业网站开发公司国外免费网站域名服务器查询
  • 做公司网站需要准备什么科目微分销商城
  • 邯郸网站建设咨询安联网络wordpress中文案例
  • 跟京东类似的网站即墨做网站
  • 富阳做网站方式定制制作网站价格
  • 保定 网站建设网站建设合同建设方注意事项
  • 最近中国新闻事件网站推广百度优化
  • 营销网站制作需要多少钱wordpress问答插件哪个好
  • 企业网站的常见服务是什么长春百度seo
  • 网站开发用什么语言最安全广州海珠区租房
  • 网站内容管理系统 下载网站建设前期如何规划
  • 网站论坛源码wordpress 头像缓存到本地
  • 查网站是什么公司做的wordpress 注册登陆插件