TP-Micro基于 Teleport 的微服务框架
TP-Micro 是一个基于 Teleport 定制的、简约而强大的微服务框架。
安装
go version > 1.9
go get -u -f -d github.com/xiaoenai/tp-micro/... cd $GOPATH/src/github.com/xiaoenai/tp-micro/cmd/micro go install
特性
支持服务自动发现
支持自定义服务链接选择器
支持负载均衡
支持多路复用IO及其连接池
支持自定义协议
支持自定义Body的编解码类型
支持插件扩展
支持心跳机制
日志信息详尽,支持打印输入、输出消息的详细信息(状态码、消息头、消息体)
支持设置慢操作报警阈值
支持自定义日志
支持平滑关闭与更新
支持推送
支持的网络类型:
tcp
、tcp4
、tcp6
、unix
、unixpacket
等客户端支持断线后自动重连
支持过载保护(断路器)
代码示例
服务端
package main import ( micro "github.com/xiaoenai/tp-micro" tp "github.com/henrylee2cn/teleport" ) // Arg arg type Arg struct { A int B int `param:""` } // P handler type P struct { tp.PullCtx } // Divide divide API func (p *P) Divide(arg *Arg) (int, *tp.Rerror) { return arg.A / arg.B, nil } func main() { srv := micro.NewServer(micro.SrvConfig{ ListenAddress: ":9090", }) srv.RoutePull(new(P)) srv.ListenAndServe() }
客户端
package main import ( micro "github.com/xiaoenai/tp-micro" tp "github.com/henrylee2cn/teleport" ) func main() { cli := micro.NewClient( micro.CliConfig{}, micro.NewStaticLinker(":9090"), ) defer cli.Close() type Arg struct { A int B int } var result int rerr := cli.Pull("/p/divide", &Arg{ A: 10, B: 2, }, &result).Rerror() if rerr != nil { tp.Fatalf("%v", rerr) } tp.Infof("10/2=%d", result) rerr = cli.Pull("/p/divide", &Arg{ A: 10, B: 0, }, &result).Rerror() if rerr == nil { tp.Fatalf("%v", rerr) } tp.Infof("test binding error: ok: %v", rerr) }
开源协议
Micro 项目采用商业应用友好的 Apache2.0 协议发布
评论