<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          wego_frameworkgolang 集成開發(fā)框架

          聯(lián)合創(chuàng)作 · 2023-09-28 05:08

          wego 是一個采用 go-kit 模式封裝的 golang 開發(fā)框架,專注編寫業(yè)務(wù)邏輯。

          開發(fā)流程:

          1. 編寫 service 中間件
          2. 組合中間件形成 service chain
          3. handler 由 filter(endpoint)和 service chain 組合形成 
          4. provider 中注冊 handler
          5. 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
          瀏覽 15
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲精品国产精品乱码不卡√香蕉 亚洲日韩一区二区三区四区丨高清 | 99爱视频在线观看 | 色婷婷综合久色aⅴ五区最新 | 国产成人高清 | 男女性爱视频免费观看 |