Go-micro golang版本的微服务框架,其构建了go语言微服务框架的经典设计架构。其抽象出的结构定义轻量,灵活,方便企业做二次开发。
Server
Server包下的集中了server端代码的实现
两个rpc协议:
1 | // Server is a simple micro server abstraction |
Mucp协议
rpc_server 实现上面的接口。
这是go micro原生的协议,transport包是其主要的依赖包 包下有对底层传输协议的封装。底层的协议主要是http grpc quic。
Mucp 协议的数据格式很简单:
1 | type Message struct { |
grpc协议
我们在上面的协议中也看到了grpc 但是这里的grpc跟上述的grpc是完全不一致的。简单来说这里的grpc是和rpc 一个级别的。都是实现server的接口
数据协议采用pb自定义协议。
老东家公司的项目中 采用此方式进行。
为了进行go-micro 注册框架的适配 注册方式跟传统grpc 注册是有区别的。注册都是向zk 等远程注册中心进行的注册。
Client
Registry
服务注册有些地方也叫服务治理其实本质都是一样的:将服务的ip address 和 port 注册到分布式协调组件中(协调组件有zk,etcd等)。go-micro对注册服务的格式进行了统一,如下:
分布式注册格式如下
1 | type Node struct { |
Go-micro的设计是不绑定于特定的注册中心和rpc通信,抽象Node Service 的结构体
Grpc-go-micro
Client
Server
Registry
不同于正常的服务注册 这里的注册指的是服务类中方法在本地的注册,这是一个比较重要的部分。任何rpc都需要进行这步操作 接收到请求后找到相应的调用方法然后进行反射调用。
注册的方式跟grpc源码注册方式是相似的。
反射获取结构体方法
针对各个方法进行check
1 | type service struct { |
Handler
这里所指的其实是grpc 的 handler,