背景 在上一篇文章高性能API网关goku底层开发框架的设计与实现1(https:www。toutiao。comarticle7039998811200487943)中,我们对其底层的eosc中间件开发框架的选举原理与进程管理进行了分析。(注意goku现在更名为apinto)本篇文章将给大家详细介绍下如何在本地调试Apinto,这个对于大家了解其实现与工作原理至关重要。准备环境 go1。17以及以上(本文环境是go1。19) Goland(集成开发环境)代码与配置克隆代码到本地 gitclonehttps:github。comeolinkerapinto。git 2。下载依赖 cd到项目目录下gomodtidy 图1。下载依赖 3。安装最新的gopsgoinstallgithub。comgooglegopslatest 4。编辑Goland的Debug配置 图2Goland应用启动配置 5。运行程序 图3debug方式启动应用 启动后,apinto会启动三个进程,分别是Master,Admin,Worker。其中各个节点的Master实现了raft协议,Admin是实现api的http服务。数据准备 通过下述命令,创建一个服务。curlXPOSThttp:127。0。0。1:9400apiserviceHContentType:applicationjsond{name:apintoapi,driver:http,description:访问官方示例接口,timeout:3000,retry:3,scheme:https,nodes:〔demo。apinto。com:8280〕,balance:roundrobin} 返回结果{create:2022061611:00:45,description:访问官方示例接口,driver:http,id:apintoapiservice,name:apintoapi,profession:service,retry:3,scheme:https,timeout:3000,update:2022061611:00:45,discovery:,service:,nodes:〔demo。apinto。com:8280〕,balance:roundrobin,plugins:null}调试过程 然后接下来我们通过postman调用服务接口,获取服务的基本信息,然后通过debug,查看他是如何工作的。 调用服务接口 通过Attach调试进程 在弹出的进程列表中选择需要Debug的Admin进程即可 选择具体的进程 注意:Debug模式开启后,master进程名称为apintostart,当Debug模式关闭,master进程名称为apinto:master设置断点 在processadmin的process。go里面设置断点 在processadmin的openapiworker。go里面设置断点 然后我们触发http请求,可以看到请求被apinto:admin进程截获了,然后通过pa。router分配给具体的控制权执行处理,而具体的处理Handler上图的oe。getEmployeeByName便是具体的处理核心。 请求处理入口 处理核心func(oeWorkers)GetEmployee(profession,namestring)(WorkerInfo,error){id,ok:eosc。ToWorkerId(name,profession)if!ok{returnnil,fmt。Errorf(sw,id,ErrorNotMatch)}d,has:oe。data。GetInfo(id)if!has{returnnil,fmt。Errorf(sw,id,ErrorNotExist)}returnd,nil} 其中上述代码变获取了相应的服务信息