Go-micro学习笔记

-目录-

Go-micro

原理

go-micro原理

broker原理

整体关系

相互关系

Service通过Register注册到服务中心,Client通过Selector模块选择Service并进行负载均衡,从注册中心拿到服务节点然后通过节点信息通过Transport定义的通信协议来进行通信。

详细介绍

整个Go Micro 都是有这8个interface构成的。

操作

使用micro new创建项目

new命令:
   --namespace "go.micro"          命名空间(首部)e.g com.example
   --type "srv"                    服务类型 e.g api, fnc, srv, web
   --fqdn   					   全限定域名 服务的全名称包括命名空间和别名 e.g com.example.srv.service (defaults to namespace.type.alias)
   --alias  					   给项目名称起别名 (末尾)                  
   --plugin [--plugin option --plugin option]    Specify plugins e.g --plugin=registry=etcd:broker=nats or use flag multiple times

后端服务先在consul上注册,然后前端需要调用时根据后端服务注册时的名字,调用服务。

前端:

// main.go
// 注册路由
service.HandleFunc("/example/call", handler.ExampleCall)


// handler.ExampleCall()
//根据服务调用,因为之前引入了service的微服务的Protobuf包,所以可以直接调用生成的方法
//service的微服务的Protobuf包可谓是又当又立,既定义了注册服务方法,又定义了获取服务方法,又定义了这些方法所用到的数据类型
//根据名称获取服务 后面的client是服务通讯协议可以是grpc(消息编码解码是Protobuf)
exampleClient := example.NewExampleService("go.micro.srv.test_srv", client.DefaultClient)
//返回的值也是service里的微服务Protobuf包定义的消息类型
rsp, err := exampleClient.Call(context.TODO(), &example.Request{
    Name: request["name"].(string),
})

后端:

// New Service
service := micro.NewService(
   micro.Name("go.micro.srv.test_srv"),
   micro.Version("latest"),
)

// Initialise service
service.Init()

// Register Handler
//service注册服务,有服务名称,和实现方法的一个struct,或者说是有一系列方法的类
example.RegisterExampleHandler(service.Server(), new(handler.Example))
© 2019 - 2023 · YuYoung's Blog