使用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),
)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐