service 模块
service 模块
表示一个微服务,包括了 Client 、 Server 对象,提供了统一、简明的使用面板
因此它主要是:一些组织代码;一些接口的 wrapper (包装器)和 syntactic sugar(语法糖)
没有实质性内容,但是很重要。因为使用 micro/go-micro ,基本上都是在调用 service 模块上相关接口
相关文件
service 相关文件集中在 micro/go-micro 根目录下
内容如下:
文件 | 说明 |
---|---|
function.go | 包装 service 对象,提供 1 次服务功能(执行完一次服务后就退出) |
micro.go | 创建、注册面板。提供创建 service 、 function 、 publisher 接口;提供注册 handler 、 subscriber 接口 |
options.go | service 对象所需要的 options ;以及每个 option 的设置细节 |
publisher.go | 包装 service.client 对象的 pulish 方法,提供简明接口 |
service.go | service 模块实现。主要就是初始化 options ,启动微服务、关闭微服务这种 |
wrapper.go | 包装 service.client 对象的方法,提供简明接口 |
代码分析
1. service 定义
摘自 https://github.com/micro/go-micro/blob/master/micro.go
// Service is an interface that wraps the lower level libraries
// within go-micro. Its a convenience method for building
// and initialising services.
type Service interface {
Init(...Option)
Options() Options
Client() client.Client
Server() server.Server
Run() error
String() string
}
- Init/Run
- 初始化启动微服务
- Options
- 通过它,可以获取其他 7 大模块对象;以及其他选项设置等等
- Client/Server
- Options 中也可以获取,单独拎出来,说明这 2 大模块对象经常用到
- Client ,微服务包含一个访问其他微服务的客户端对象
- Server ,微服务包含一个对外提供服务的服务端对象
2. service 实现
摘自 https://github.com/micro/go-micro/blob/master/service.go
type service struct {
opts Options
once sync.Once
}
这里只摘录了下 service 实现中的数据结构
- opts
- 储存了其他 7 大模块对象
- 其他选项设置
- once
- 防止微服务多次初始化
service 相关方法实现,均很简单,略
3. service 选项
所有选项均在: https://github.com/micro/go-micro/blob/master/options.go ,包含所有选项细节
罗列如下:
选项 | 说明 |
---|---|
Broker | 设置 Broker 插件 |
Client | 设置 Client 插件 |
Context | 设置微服务的上下文。可用于发出关闭服务的信号;可用于额外的选项值 |
Server | 设置 Server 插件 |
Registry | 设置 Registry 插件 |
Selector | 设置 Selector 插件 |
Transport | 设置 Transport 插件 |
Address | 设置微服务地址 |
Name | 设置微服务名称 |
Version | 设置微服务版本号 |
Metadata | 设置微服务元数据 |
Flags | 设置微服务命令行参数。追加至原命令行参数尾部 |
Action | 设置微服务命令行参数处理函数 |
RegisterTTL | 设置 Registry 插件的 TTL 值 |
RegisterInterval | 设置 Registry 插件的 re-register 时间间隔 |
WrapClient | 添加客户端请求处理前的中间件,最后一个添加的最新执行。使用了责任链模式 |
WrapCall | 同 WrapClient ,但用于 rpc 、 grpc 这种 |
WrapHandler | 同 WrapClient ,但是服务器端处理句柄链 |
WrapSubscriber | 同 WrapClient ,但是服务器端 subscriber 处理句柄链 |
BeforeStart | 设置微服务 start() 前处理句柄 |
BeforeStop | 设置微服务 stop() 前处理句柄 |
AfterStart | 设置微服务 start() 后处理句柄 |
AfterStop | 设置微服务 stop() 后处理句柄 |
4. 其他
本模块所有相关文件均为简单代码, 重点 service.go 、 options.go 2 个文件
下篇分析 transport 模块,待续