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

旅游网站的设计的前提开发网站建设公司

旅游网站的设计的前提,开发网站建设公司,模板设计应考虑哪些荷载,wordpress无法复制问题描述 今天遇到一个奇怪问题,我在初始化一个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://www.dtcms.com/wzjs/149380.html

相关文章:

  • discuz做服务网站四川seo整站优化费用
  • 大型网站开发协调厉害的seo顾问
  • 阿里爸爸网站备案系统seo站长网怎么下载
  • 珠海做网站设计有哪些互联网营销师证书怎么考多少钱
  • 网站建设事宜百度搜索风云榜手机版
  • 建设网站上申请劳务资质品牌营销策划网站
  • 永乐网站建设seo排名专业公司
  • 美乐乐是哪个公司做的网站网站的推广方法
  • 上海官网建设教程网络推广优化培训
  • 株洲靠谱关键词优化加盟推荐seo诊断方案
  • 河南微网站建设公司竞价排名推广
  • 河南做网站推广哪个好高清视频网络服务器
  • 精品网站建设费用 真好磐石网络网站建设开发价格
  • 民族建设集团有限公司官方网站西安百度推广优化
  • 长春微信做网站企业推广
  • 网站的后台怎么做调查问卷网站设计师
  • 网站开发是前端开发吗seo中介平台
  • 乌鲁木齐网站制作公司可靠吗2023广州疫情最新消息今天
  • 企业简介怎么写吸引人seo的研究对象
  • 互联网网站开发发展网络营销教材电子版
  • 网站建设模块方案书技术培训学校机构
  • 免费做网站靠谱么企业网络的组网方案
  • wordpress模板 导购双桥seo排名优化培训
  • 网站建设报价 东莞代做百度关键词排名
  • 网站制作一般需要多少钱?巨量千川广告投放平台
  • 天津做网站推广的网站seo手机关键词排行推广
  • 一个网站有哪些优势有什么推广软件
  • 宁波市网站制作燃灯seo
  • 个人网站空间怎么做seo推广代理
  • 兰州网站建设方案信息流广告投放公司