ATC 是一个快速开发GO应用程序的开源框架,支持RESTful API 及 Thrift RPC的框架.可根据自身业务逻辑选择性的卸载中间件的功能,均支持平滑退出。
要求GO版本 >= 1.8
当前版本: 0.1.1 (Beta 2017-05-02)
稳定版本: 1.0.0 (2017-05)
More info atc.wiki
老版本GITHUB
go get github.com/adolphlxm/atc
用到的第三方 go package TAG
“`config
// 配置文件加载包,之前写的一个Github账户,后续会迁移过来,方便管理
github.com/lxmgo/config
// 官方websocket包
code.google.com/p/go.net/websocket
// Thrift go 包
git.apache.org/thrift.git/lib/go/thrift
// xorm 包
github.com/go-sql-driver/mysql
github.com/go-xorm/xorm
github.com/go-xorm/core
“`
一个经典的ATC例子 atc.go
package main
import (
"github.com/adolphlxm/atc"
)
type LoginHandler struct {
atc.Handler
}
func (this *LoginHandler) Get(){
// 已登录
if true {
loginData := map[string]interface{}{
"username" : "ATC",
"regtime":"2017-04-28",
}
this.Ctx.SetData("data",loginData)
this.Ctx.SetData("ID",this.Ctx.Query("id"))
this.JSON()
return
}
// 未登录
// 自定义错误提示内容
this.Error406(-1).Message("没有权限查看").JSON()
// error.ini错误码匹配的提示内容
// this.Error406(-1).JSON()
return
}
func main(){
// 根据配置文件注入依赖中间件
// 目前支持:HTTP/Websoeckt、Thrift、ORM(xorm、其它待开发)
atc.Run()
}
路由加载 router.go
// 登录过滤器
// 可以通过自定义过滤器来实现登录状态、权限检查等功能
func AfterLogin(ctx *context.Context){
// 错误输出
error := atc.NewError(ctx)
error.Code(401,10000).JSON()
}
func init(){
// 分组版本控制
v1 := atc.Route.Group("V1")
{
// V1版本路由
v1.AddRouter("users",&LoginHandler{})
...
}
V2 := atc.Route.Group("V2")
{
// V2版本过滤器, 根据路由规则加载。
// 支持三种过滤器:
// 1. EFORE_ROUTE //匹配路由之前
// 2. BEFORE_HANDLER //匹配到路由后,执行Handler之前
// 3. AFTER //执行完所有逻辑后
v2.AddFilter(atc.BEFORE_ROUTE,"users.*",AfterLogin)
// V2版本路由
v2.AddRouter("users",&LoginHandler{})
...
}
}
然后在浏览器访问
http://localhost/V1/users/login
http://localhost/V2/users/login
BFORE_ROUTE
过滤器, 未通过则得到一个json返回。Get()
, 将会得到一个json返回。关于Thrift RPC 具体可以 度娘、谷爹查看
之前写过一篇Thrift简单使用教程:GO/PHP使用指南
获取Thrfit-官方
官方各种DEMO
协议库IDL文件参考资料
这里就不累赘描述Thrift具体用法了。
Go的Thrift包安装:
go get git.apache.org/thrift.git/lib/go/thrift
注:为了实现Thrift RPC平滑退出,改了Thrift Go源码,安装后需要重新覆盖下源码。
复制 github.com/adolphlxm/atc/rpc/thrift/lib/thrift
目录下的源码到 git.apache.org/thrift.git/lib/go/thrift
即可。
Thrift RPC 路由 router.go
func init() {
processor := micro.NewMicroThriftProcessor(&MicroHandler{})
atc.ThriftRPC.RegisterProcessor("user", processor)
}
go build atc.go
./atc
Flag参数说明:
config
-c string
use -c
-m string
Use -m
-v Use -v
ATC信号控制:
信号量 | 退出 |
---|---|
TERM,INT | 立即终止 |
QUIT | 优雅的关闭进程,即等所有请求结束后再关闭 |
├── conf │ ├── app.ini │ └── error.ini ├── front │ └── HTML... ├── bin ├── src │ ├── httprouter │ ├── V1 │ └── router.go │ └── thriftrpc │ ├── idl │ ├── gen │ ├── ...(.go) │ └── router.go └── atc.go
app.ini
配置日志类型app.ini
配置错误码文件文档陆续更新中…
DEMO更新中…
ATC is Licensed under the Apache License, Version 2.0 (the “License”)
(http://www.apache.org/licenses/LICENSE-2.0.html).
框架:ATC
工具: ATC-tool
DEMO: ATC-demo