1. 程式人生 > >YoyoGo微服務框架入門系列-基本概念

YoyoGo微服務框架入門系列-基本概念

## 前言 Github開源:[github.com/yoyofx/yoyogo](https://github.com/yoyofx/yoyogo) 還請多多Star 之前簡單介紹了[YoyoGo微服務框架](https://www.cnblogs.com/maxzhang1985/p/12981989.html)的基本內容,接下來了解下框架中的基本概念。 ## 從一個簡單Web服務Demo出發 ```golang package main import ... func main() { YoyoGo.CreateDefaultBuilder(func(router Router.IRouterBuilder) { router.GET("/info",func (ctx *Context.HttpContext) { // 支援Group方式 ctx.JSON(200, Context.M{"info": "ok"}) }) }).Build().Run() //預設埠號 :8080 } ``` ## 框架基本概念 ### 1.HostBuilder HostBuilder本身是一個抽象概念(類),可以衍生出多種**HostBuilder**。 比如:Web Host Builder , RPC Host Builder , General Host Builder等等。 上面的程式碼用**CreateDefaultBuilder**函式,建立的就是一個預設的**WebHostBuilder**,既然是WebHostBuilder那預設最重要的函式,那當然是用於Http路由的宣告路由函式。HostBuilder本身包含了很多定義程式生命週期的函式: 1. **UseConfiguration** : 用於定義配置檔案 2. **Configure** : 用於定義ApplicationBuilder,它是管理程式如何構建的一組方法 3. **ConfigureServices** : 用於定義IOC容器 4. **OnApplicationLifeEvent** : 用於定義程式生命週期的事件通知 5. **Build** : 用於生成最終可執行的Host物件 ### 2.ApplicationBuilder 如果說程式是由Host物件裝載的話,Host的構造就是由ApplicationBuilder完成的。Host本身就是由ApplicationBuilder與Server共同構成的。這兩個物件一一對應,ApplicationBuilder用於構造,Server用於承載具體的應用協議。比如**WebHost**就是由WebApplicationBuilder構造並提供了**ServeHTTP**函式,由HttpServer來承載,共同完成的。 ### 3.RouterBuilder **RouterBuilder**是由**WebApplicationBuilder**衍生出來的路由定義物件,用於宣告GET,POST,PUT,DELETE等型別的請求處理程式。也就是說沒有建立WebHostBuilder就沒有WebApplicationBuilder也就沒有RouterBuilder;框架本身就是支援多種Server協議的。 路由函式定義: ```golang func(router *Router.RouterGroup) { } ``` 上面demo中就通過它完成了一個GET請求,並返回JSON: {"info":"ok"}. RouterBuilder本身還支援Group的方式,將一組API進行統一的URL定義: ```golang router.Group("/v1/api", func(router *Router.RouterGroup) { router.GET("/info", GetInfo) router.GET("/hello", GetHello) }) ``` 通過以上程式碼將生成 /v1/api/info 和 /v1/api/hello 兩個GET請求路由地址。 ### 4.Host 建立**HostBuilder**後,通過**Build**函式得到了最終可執行的**Host**物件(**Build().Run() **)。 建立Host物件的同時,其實也完成了Server物件的建立,Host與Server一一對應的。Host表示了一個可執行的宿主,它負責管理整個程式的生命週期;而Server則是更為具體的服務型別,比如Http,xxRPC。Server更多是一種通訊協議上的表達。 ### 5.定製WebHostBuilder 在上面的demo中,我們定義了一個預設的WebHostBuilder,但是它所支援的內容較少只提供了最基本的Host定義,那如何定製一個WebHostBuilder呢,如下例子: ```golang func CreateCustomBuilder() *Abstractions.HostBuilder { return YoyoGo.NewWebHostBuilder(). Configure(func(app *YoyoGo.WebApplicationBuilder) { app.UseEndpoints(func(router Router.IRouterBuilder) { router.GET("/info",func (ctx *Context.HttpContext) { ctx.JSON(200, Context.M{"info": "ok"}) }) }) } ``` 通過定製,我們可以使用完整的HostBuilder構建函式來構建應用程式。然後通過如下例子將它執行起來: ```golang package main import ... func main() { CreateCustomBuilder().Build().Run() //預設埠 :8080 } ``` ![](https://mnur-prod-public.oss-cn-beijing.aliyuncs.com/0/tech/20200817181043.png) ## 總結 至此我們介紹了YoyoGo微服務框架的基本概念: 一個Web服務是由 WebHostBuilder -> WebApplicationBuilder -> HttpServer -> WebHost 組成。 ![](https://mnur-prod-public.oss-cn-beijing.aliyuncs.com/0/tech/HostBuilder時序圖.png)