这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
好的,今天我们来讲讲我们青训营的大项目--抖声 首先我们先来看官网的apifox接口文档,刚看到这个其实我对这个apifox其实还蛮感兴趣的 我去到他们官网,映入眼帘的事apifox = jmeter + postman + mock + swagger 那确实还蛮厉害的,它拥有了jmeter的性能测试,postman的接口调试,mock的静态模拟数据,swagger的文档说明,激动的我马上下载下来看看,使用体验确实还可以,那我们闲话也别多说,来聊聊项目
开始我们的项目,首先就是项目的一个架构设计,肯定是一个微服务框架,那么之前学过官方的一个项目eazy_note,我认为可以简单参考一下这个项目的设计,比如api接入层以及两个微服务模块,这比较简单基础,然后能页面的访问请求通过api去调整,查表操作在另两个服务里进行
来看一下项目的目录架构组成,api层用rpc包下的东西作为rpc请求的client端,在另两个服务里面handler.go文件来处理这次请求 我们看一下init RPC的代码
func initNoteRpc() {
r, err := etcd.NewEtcdResolver([]string{constants.EtcdAddress})
if err != nil {
panic(err)
}
c, err := noteservice.NewClient(
constants.NoteServiceName,
client.WithMiddleware(middleware.CommonMiddleware),
client.WithInstanceMW(middleware.ClientMiddleware),
client.WithMuxConnection(1), // mux
client.WithRPCTimeout(3*time.Second), // rpc timeout
client.WithConnectTimeout(50*time.Millisecond), // conn timeout
client.WithFailureRetry(retry.NewFailurePolicy()), // retry
client.WithSuite(trace.NewDefaultClientSuite()), // tracer
client.WithResolver(r), // resolver
)
if err != nil {
panic(err)
}
noteClient = c
}
可以看到,先注册EtcdResolver然后直接使用目标微服务吓得noteservice.NewClient就可以直接用client.xxx方法调用对应的方法了 可以说,真的是蛮方便了,像Java我们需要先定义一个接口,新写一个client类,然后进行调用,相比起来,其实差不多,但是go的写法上可能更简洁
err := rpc.CreateNote(context.Background(), ¬edemo.CreateNoteRequest{
UserId: userID,
Content: noteVar.Content, Title: noteVar.Title,
})
如上所示,创建note直接这样就好了。 今天的分享就到这,明天我们继续