wego_frameworkgolang 集成開發(fā)框架
wego 是一個采用 go-kit 模式封裝的 golang 開發(fā)框架,專注編寫業(yè)務(wù)邏輯。
開發(fā)流程:
- 編寫 service 中間件
- 組合中間件形成 service chain
- handler 由 filter(endpoint)和 service chain 組合形成
- provider 中注冊 handler
- server 的路由中注冊各種 handler
內(nèi)置支持 Server
- http
- grpc
- websocket
- cronjob
- timer
- command
- redis queue
- 內(nèi)部event server
- gateway server
main.go
//如果參數(shù)配置了registy,則自動進行consul的服務(wù)注冊 grpc http 都可
//例如go run main.go -name=test_service -registy=127.0.0.1:8500 -server=grpc
wego.Provider(&providers.ConsulRegistyProvider{})
//這里注冊自己的handler
wego.Provider(&provider.ExamProvider{})
//下面的server,根據(jù)啟動args參數(shù)決定
wego.Router("grpc",&router.GrpcRouter{})
wego.Router("http",&router.HttpRouter{})
wego.Router("queue",&router.QueueRouter{})
wego.Router("command",&router.CommandRouter{})
wego.Router("websocket",&router.WebSocketRouter{})
wego.Router("timer",&router.TimerRouter{})
wego.Router("cron",&router.CronRouter{})
//內(nèi)置加載事件服務(wù),無需路由,直接調(diào)用 handler
wego.Router("event", servers.NewEventCommServer())
wego.Start()
舉例
//經(jīng)過jwt認證后的用戶id,和name
fmt.Println(ctx.Request("claim.Id"))
fmt.Println(ctx.GetValue("request.claim.Name"))
//cache使用
v, _ := cache.Get("aaaaa")
v := make(map[string]interface{})
v["aaa"] = "bbb"
v["ccc"] = "ddd"
_ = cache.Set("aaaaa", v, 60)
//日志使用
ctx.Log.Info("one....")
ctx.Log.Infof(format,arg...)
//請求參數(shù)
ctx.Request("claim.Id")
//返回值
ctx.Response("aa.bb", "cc")
ctx.Response("aa.cc", "dd")
//redis使用
client := clients.Redis() //從pool中獲取一個鏈接
defer client.Close() //延時釋放鏈接,本方法執(zhí)行完畢時釋放
_, _ = client.Do("SET", "go_key", "value")
//mysql使用
user := model.CommUser{Id: id}
has, _ := clients.DB().Get(&user)
//event使用
params := make(map[string]interface{})
payload := &contracts.Payload{
Route: "two", ->接收處理的handler
Params: params,
}
events.Fire(payload)
//redis queue使用 默認db->1
msg := make(map[string]interface{})
msg["aaa"] = "bbb"
err := queues.Fire(
"demo1", ->發(fā)送的redis 隊列
"queue_test", ->偵聽隊列的server需要處理的路由handler
msg,
)
//遠程服務(wù)調(diào)用,// 為現(xiàn)有php模式而封裝
params:=make(map[string]interface{})
params["test_rpc_post"] = "test_rpc_post"
resp := clients.
Micro("consul_demo"). //服務(wù)的名稱
Service("demo.post"). //服務(wù)的注冊的handler
Params(params).
Run()
該方法會從consul中獲取注冊的服務(wù),并隨機選擇一個進行請求,支持grpc和http post
http post 對應(yīng)的遠端路由為 http:/host+port/demo/post評論
圖片
表情
