TP-Micro基于 Teleport 的微服務(wù)框架
TP-Micro 是一個(gè)基于 Teleport 定制的、簡約而強(qiáng)大的微服務(wù)框架。
安裝
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
特性
支持服務(wù)自動(dòng)發(fā)現(xiàn)
支持自定義服務(wù)鏈接選擇器
支持負(fù)載均衡
支持多路復(fù)用IO及其連接池
支持自定義協(xié)議
支持自定義Body的編解碼類型
支持插件擴(kuò)展
支持心跳機(jī)制
日志信息詳盡,支持打印輸入、輸出消息的詳細(xì)信息(狀態(tài)碼、消息頭、消息體)
支持設(shè)置慢操作報(bào)警閾值
支持自定義日志
支持平滑關(guān)閉與更新
支持推送
支持的網(wǎng)絡(luò)類型:
tcp、tcp4、tcp6、unix、unixpacket等客戶端支持?jǐn)嗑€后自動(dòng)重連
支持過載保護(hù)(斷路器)
代碼示例
服務(wù)端
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)
}
開源協(xié)議
Micro 項(xiàng)目采用商業(yè)應(yīng)用友好的 Apache2.0 協(xié)議發(fā)布
評(píng)論
圖片
表情
