micro/go-micro 介绍与源代码分析(三): service 模块

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 模块,待续

发布了129 篇原创文章 · 获赞 73 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/u013272009/article/details/93632947