go-micro
约 4 分钟阅读
- asim/go-microGitHubasim/go-microasim/go-micro · 基本接口定义+Plugins 提供平台相关实现 · Transport http :52980 · Broker http :52981 · GRPC server :53915 · 参考 · m3o/m3o笔记:go-micro
- 基本接口定义+Plugins 提供平台相关实现
- Transport http
- Broker http
- GRPC server
- 参考
- m3o/m3oGitHubm3o/m3o
- micro/servicesGitHubmicro/services
- 基于 micro 的服务示例
- Asim Aslam on Microservices, go-micro, and PaaS 3.0Linkwww.infoq.com/podcasts/microservices-go-micro-paas3asim/go-micro · 基本接口定义+Plugins 提供平台相关实现 · Transport http :52980 · Broker http :52981 · GRPC server :53915 · 参考 · m3o/m3o笔记:go-micro
- 类似项目
- google/go-cloudGitHubgoogle/go-cloudgoogle/go-cloud · Go Cloud Development Kit · blob - 对象存储 · Google Cloud Storage · S3 · Azure Blob Storage · Local Storage笔记:go-cloud
- gRPC 不支持 Client Stream
- asim/go-micro#2212GitHub Issueasim/go-micro#2212asim/go-micro · 基本接口定义+Plugins 提供平台相关实现 · Transport http :52980 · Broker http :52981 · GRPC server :53915 · 参考 · m3o/m3o笔记:go-micro
- gRPC 服务端无法接收 metadata
- asim/go-micro#574GitHub Issueasim/go-micro#574
package main
import "go-micro.dev/v4"
func main() {
// create a new service
service := micro.NewService(
micro.Name("helloworld"),
)
// initialise flags
service.Init()
// start the service
service.Run()
}# micro 快速生成工具
# go install github.com/asim/go-micro/cmd/gomu@latest
go install go-micro.dev/v4/cmd/micro@master
micro generate skaffold
micro call helloworld Helloworld.Call '{"name": "John"}'Packagesgo-micro.dev/v4/cmd/microGo Packagego-micro.dev/v4/cmd/microGo
Components
- 分离 New 和 Init
- New 接收 Option 但不会报错
- 因此很多配置可以设置为动态
- api - HTTP API
- api.Api - mux
- api.Service
- 一个 Endpoint 和多个 registry.Service
- Path -selector-> registry.Service
- api.Endpoint
- 一个入口, Host+Method+Path
- 如果 Path 以
^开头则为 pcre
- handler - http.Handler - 实际处理
- api - http <-> registry.Service
- event - http <-> client.Publish
- http - http <-> api.Service
- rpc - http <-proto/json-> api.Service -> registry.Service
- 对 body 和服务的识别处理不同
- server - API Gateway - path -> http.Handler
- http - HTTP Server
- router
- router.Router
- 映射 http.Request -> api.Service
- 注册 endpoint
- registry
- watch registry.Registry 所有 Service 的所有 Endpoint
- 网关性质
- router.Router
- resolver - http.Request -> resolver.Endpoint/Host+Method+Path
- 提取请求信息
- auth - AuthN + AuthZ - API 资源角度
- broker - PubSub
- 异步
- events - 事件
- Stream+Store
- 支持 ACK
- nats, redis
- cache - 缓存
- kv+时效
- 只有 Get+Put+Delete 操作
- client - 客户端
- cmd - 提供命令行入口处理
- 持有所有服务的实现 - 全局上下文
- 初始化相关服务
- Before - 应用配置、Init 服务
- 默认 Action 没有任何操作
- codec - 编码
- config - 配置
- encoder.Encoder - 编码解码 - json,yaml,xml 等
- source.Source - 一个 配置项 来源
- 指向 path/路径/文件/环境变量/flag
- source.ChangeSet - 配置内容
- loader.Loader - 加载合并 source
- reader.Reader - 合并 source.ChangeSet
- 默认 json 实现
- format -> encoder.Encoder
- reader.Values - 支持 get/set/del/scan 的配置项
- reader.Value - 配置项值
- debug
- stats
- trace
- profile
- errors
- logger
- metadata - KV 元数据 - 其他用到元数据的地方都会转为该类型
- plugins - 插件体系
- plugins.Plugin - go plugin 接口 - go build -buildmode=plugin
- 支持类型 broker, client, registry, selector, server, transport
- 会注册到 cmd.DefaultXxx
- registry - Service/服务 注册中心
- registry.Service - 注册的服务信息
- 注册的名字为 server.DefaultName - 也就是服务维度 / micro.Service 维度
- 包含多个 Endpoint, Node
- registry.Endpoint - 终端
- server.Handler - 每个方法会注册为一个 Endpoint
- relfect.Type Method
- name=type.method
- server.Subscriber - 每个 Subscriber 方法 会注册为一个 Endpoint
- Func, reflect.Type.Name+.method.Name
- server.Handler - 每个方法会注册为一个 Endpoint
- registry.Node
- registry.Service - 注册的服务信息
- server - RPC 服务端
- server.Server
- server.Router - 类似 http.Handler+mux 角色
- server.Request
- server.Response
- server.Message
- server.Stream
- server.Handler - opaque handler - 实现相关
- 处理 Request -> Response
- server.Subscriber - opaque subscriber - 实现相关
- 处理 Message
- func
- func(context.Context,Type)
- struct
- func(Type)
- func(context.Context,Type)
- func(context.Context,requestType,responseType) - grpc - 以 responseType 作为 Request
- selector - 服务选择机制
- transport - 传输协议抽象
- runtime - 运行时
- selector - 负载选择
- store - 数据存储/对象存储/KV 存储
- redis, memcached, mysql, consul, file(bolt),cockroach
- 有 database, table 概念
- 有 offset,limit 概念
- 读取默认返回多值
- 数据包含 key,value,metadata,expire_at
- Read+Write+Delete+List 操作
- 现在已经没有 BlobStore 了
- s3.goGitHub Fileasim/go-micro/store/s3/s3.go
- sync - 分布式锁
- transport - 传输层抽象
- web
- web.Service - path -> http.Handler
- 会注册
- 持有 cmd.Cmd - 包含整体上下文
- http.ServeMux
- http.Client
- web.Service - path -> http.Handler
- micro - 微服务
- micro.Service - micro 平台服务规范/Pattern
- 会注册
- client.Client
- server.Server
- Init
- 加载插件 MICRO_PLUGIN
- cmd.Cmd.Init
- store.Store.Init
- Start
- Server.Start
- Run
- Client debug.Handler
- Profile.Start
- Start
- Context.Done()
- Stop
- micro.Function
- 继承 micro.Service
- 一次性调用
- micro.Service - micro 平台服务规范/Pattern
- 大部分组件都有 Default
- Service
- micro.Service - micro 平台服务规范/Pattern
- micro.Function
- web.Service - path -> http.Handler
- api.Service - Endpoint -> rpc Service
- registry.Service - 注册的服务信息
- runtime.Service - 运行时相关服务
RPC
- micro metadata 上下文内容
- Remote
- content-type
- user-agent
- grpc 时客户端会将 micro metadata 的数据转到 grpc 头 - 如果要添加授权则使用 micro metadata
- client
- WithServiceToken - authWrapper 会取 metadata 里的 Authorization
- 有 Auth 会用到 metadata 里的 Micro-Namespace
- HeaderPrefix 默认 Micro-
- Namespace
- From-Service
protoc-gen-micro
- grpc 适配 micro
# go install github.com/asim/go-micro/cmd/protoc-gen-micro/v3@latest
go install go-micro.dev/v4/cmd/protoc-gen-micro@latestPackagesgo-micro.dev/v4/cmd/protoc-gen-microGo Packagego-micro.dev/v4/cmd/protoc-gen-microGo
FAQ
asim/go-micro vs micro/go-micro
- asim/go-micro
- 个人项目
- 接口变化很大
- 涉及到 License 变化
- micro/go-micro -> asim/go-micro
- micro/go-microGo Packagegithub.com/micro/go-micro/v3Go
- 公司项目 - micro.mu
- 接口和实现满足公司需要
关联信息
反向链接和本文引用的外部资料。
反向链接
- Go Awesome笔记 · go-micro
https://go-proverbs.github.io/ · mux · chi - ⭐️ · gin, mux · ORM · gorm - ⭐️ · 基于反射 · 目前 Go 里实现最为优美的 ORM · XORM 被 gogs 和 gitea 使用,是 gogs 原作者开发 - 但认为比不上 gorm
References
GitHub
7 条- asim/go-microgithub.com/asim/go-micro
- asim/go-micro/store/s3/s3.gogithub.com/asim/go-micro/blob/09d6d0e2d22b7d342de713b762b982afe93396c6/store/s3/s3.go
- asim/go-micro#2212github.com/asim/go-micro/issues/2212
- asim/go-micro#574github.com/asim/go-micro/issues/574
- google/go-cloudgithub.com/google/go-cloud
- m3o/m3ogithub.com/m3o/m3o
- micro/servicesgithub.com/micro/services
Packages
1 条- github.com/micro/go-micro/v3pkg.go.dev/github.com/micro/go-micro/v3
其他外链
1 条- www.infoq.com/podcasts/microservices-go-micro-paas3www.infoq.com/podcasts/microservices-go-micro-paas3