<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 日志處理 作為一款微服務框架,通過 GRPC 進行方法調用是業界的標配,Orange 框架目前已經支持 GRPC 服務。 框架內置GRPC服務有如下特點: - 無需使用者配置額外的 proto 文件; - 對現有編寫模式無感知,通過配置即可將 HTTP 服務對應的方法復刻到 GRPC; - 對與客戶端調用也使用 Orange 框架的應用通過內置 GRPC 客戶端將和 HTTP 請求一樣快速方便的接入 GRPC ## 原理簡述 Orange 框架已經內置了一個通用的 proto 文件,通過該 proto 文件可以滿足我們大部分的使用需求,proto 文件詳見 [gitee.com/zhucheer/orange/blob/master/grpc/orange.proto](https://gitee.com/zhucheer/orange/blob/master/grpc/orange.proto)。 我們在使用 GRPC 服務時都是直接使用該 proto 文件生成的方法進行操作,該文件中定義了一個和 HTTP 請求類似的結構,只包含 `RequestDo` 一個方法,通過該方法傳遞請求和返回,平滑的將 HTTP 方法復刻到 GRPC,示意圖如下。 ![](https://img.kancloud.cn/cb/07/cb07fe26df5f32a5e8dab97267a58d42_767x292.png) ## 服務注冊 啟動 GRPC 服務之前需要注冊對應的 GRPC 方法,方法注冊只需要在路由中定義 GRPC 或 ALL 路由綁定即可,和現有 HTTP 開發模式一樣。 下面兩種路由綁定方法都能注冊到 GRPC 服務。 定義GRPC請求 `groupName.GRPC("/test", controller.Test)` 定義所有請求 `groupName.ALL("/test", controller.Test)` ## 服務啟動 服務啟動沒有任何改變,配置指定 GPRC 服務端口即可。 設置 GRPC 端口方法一: 修改配置文件 `app.grpcPort : 8089` 設置 GRPC 端口方法而: 啟動程序添加命令行參數 `--grpc=8089` 配置參數優先級: 命令行參數 > 配置文件 ## 客戶端調用 服務啟動后我們就能通過框架內置的通用方法調用 GRPC 服務了,因內置的 proto 和 pb 文件已經生成好,使用框架內置方法也無需過多了解 proto 使用細節,對剛接入 GRPC 的同學非常友好。 依賴包:`"gitee.com/zhucheer/orange/grpc"` 實例化客戶端:`grpc.NewClient()` 鏈式操作設置客戶端地址:`SetSrvAddr("127.0.0.1:8089")` 設置超時時間: `SetTimeout(1)` 請求 GPRC 服務指定綁定的地址:`RunGRPC("/")` ,其中參數就是服務端再路由注冊時填的路徑。 ``` // 引入包 import ( "gitee.com/zhucheer/orange/grpc" ) // 指定 GRPC 服務地址和端口 resp, err := grpc.NewClient("127.0.0.1:8089").SetTimeout(1).RunGRPC("/") ``` ## 完整的示例 該示例將服務端客戶端分別放著兩個方法里面,啟動后通過 訪問`http://127.0.0.1:8088/rpctest ` 后程序回調用自身的 GRPC 服務對應路徑為 "/" 的方法,輸出 `Hello world!`。 ``` golang package main import ( "gitee.com/zhucheer/orange/app" "gitee.com/zhucheer/orange/grpc" ) func main() { router := &Route{} app.AppStart(router) } type Route struct { } func (s *Route) ServeMux() { app.NewRouter("").GRPC("/", func(ctx *app.Context) error { return ctx.ToString("Hello world!") }) app.NewRouter("").GET("/rpctest", func(ctx *app.Context) error { resp, err := grpc.NewClient().SetSrvAddr("127.0.0.1:8089").SetTimeout(1).RunGRPC("/") if err != nil{ return ctx.ToString("grpc get respones:" + err.Error()) } return ctx.ToString("grpc get respones:" + resp.String()) }) } func (s *Route) Register() { } ``` 服務啟動: ```shell ## 開啟go mod $ go mod init ## 先更新框架到master $ go get gitee.com/zhucheer/orange@master ## 啟動服務配置 GRPC 端口 go run main.go --grpc=8989 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看