go-micro、consul、rpc、gin构建微服务入门
·
使用micro构建微服务框架
micro new --type "web" gweb
micro new --type "srv" trpc
首先,将生成的文件进行更改,目前版本micro默认注册到etcd,所以需要指定注册到consul
在main.go中
reg := consul.NewRegistry(registry.Addrs(":8500"))
service := web.NewService(
//在原有的参数基础上,添加
web.Registry(reg),
)
我们还要结合gin框架
还是在main.go中
r := gin.Default()
r.POST("/" , func (c *gin.Context){
//逻辑
})
service := web.NewService(
//在原有基础上添加传入参数
web.Handler(r),
)
注意,此时生成的文件还在报错,是micro自动导入一个handler function,由于我们自己写了一个post页面,所以目前不需要自动生成的handler。
修改rpc
由于使用命令行进行自动生成的rpc,会自动生成一个proto文件,我们需要将其转化为pb.go和pb.micro.go文件
所以,到proto文件的目录下,执行命令,会自动生成go文件。
protoc --go_out=./ --micro_out=./ trpc.proto
将生成的两个文件,放到gweb目录下,先在gweb目录下,创建proto文件夹
mkdir proto
再进行复制
cp ./*.go ../../../gweb/proto
由于rpc我们还是使用的是micro进行创建,所以默认注册到etcd,所以我们需要指定注册到consul
在trpc中的main.go文件进行更改
reg := consul.NewRegistry(registry.Adds(":8500"))
micro := micro.NewService(
//在原有的基础上添加参数
micro.Registry(reg),
)
web调用rpc
首先回到web的main.go中
我们需要在post请求中进行远程调用rpc服务
首先main.go
r := gin.Default()
r.POST("/" , func (c *gin.Context){
//逻辑
var name proto.Request
c.Bind(&name)//将接收到的参数,进行绑定
//使用micro封装好的接口进行访问
client := micro.NewService(micro.Name("go.micro.web.client"))
Uapi := proto.NewTrpcService("go.micro.srv.trpc" , client.Client())
rep ,err := Uapi.Call(context.Background() , &name)
if err != nil {
c.JSON(500 , err)
}else{
c.JSON(200 , rep)
}
})
service := web.NewService(
web.Handler(r),
)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)