73

TP-Micro — 基于 Teleport 的 Go 语言微服务框架

 5 years ago
source link: https://www.oschina.net/p/tp-micro?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

TP-Micro 是一个基于 Teleport 定制的、简约而强大的微服务框架。

YFBFRzF.jpg!web

安装

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的编解码类型

  • 支持插件扩展

  • 支持心跳机制

  • 日志信息详尽,支持打印输入、输出消息的详细信息(状态码、消息头、消息体)

  • 支持设置慢操作报警阈值

  • 支持自定义日志

  • 支持平滑关闭与更新

  • 支持推送

  • 支持的网络类型: tcptcp4tcp6unixunixpacket

  • 客户端支持断线后自动重连

  • 支持过载保护(断路器)

代码示例

  • 服务端

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 协议发布


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK