Hertz をすぐに始めるための記事

導入

Hertz は ByteDance が開発した Golang マイクロサービス HTTP フレームワークであり、高い使いやすさ、高いパフォーマンス、高いスケーラビリティの特徴を持っています。

ハーツ公式サイト

Hertz-demoは公式のケースで、http サービスを非常に高速に構築できます。

package main

import (
    "context"

    "github.com/cloudwego/hertz/pkg/app"
    "github.com/cloudwego/hertz/pkg/app/server"
    "github.com/cloudwego/hertz/pkg/common/utils"
    "github.com/cloudwego/hertz/pkg/protocol/consts"
)

func main() {
    
    
    h := server.Default()

    h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
    
    
            ctx.JSON(consts.StatusOK, utils.H{
    
    "message": "pong"})
    })

    h.Spin()
}

プロジェクト レベルの開発プロセスでは、これだけでは明らかに十分ではなく、Hertx はhz標準の http サービス ディレクトリを生成するツールも提供します。次のように:

hz new -idl ./demo.thrift

ここに画像の説明を挿入します

生成されるフォルダーと生成されるコードの構造については、 hertz 公式にも詳しく説明されているので、ここでは詳しく説明しません。

中心となるのはbiz/handlerディレクトリであり、serviceIDLで定義されたインターフェースを継承し、メソッドを書き換えるために使用される、つまりHTTPサービスのサービス層です。

biz/modelその名前と同様、ディレクトリは http サービスのモデル レイヤーであり、データベースに接続してビュー レイヤー データを返すために使用されます。

biz/routerディレクトリはルーティング層であり、その中のファイルの下にルーティングメソッドが定義されています。

// Register register routes based on the IDL 'api.${HTTP Method}' annotation.
func Register(r *server.Hertz) {
    
    
	  r.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
    
    
            ctx.JSON(consts.StatusOK, utils.H{
    
    "message": "pong"})
    })
}

ルーティング メソッドもここで分離されています。つまり、biz/handlerサービス メソッドは上のディレクトリに定義されています。これらのメソッドは.HandlerFuncすべてタイプです。ここでの分離により、メソッドがルートの背後に記述されることが防止され、コード階層が明確になります。

r.GET()メソッド本体はすべてハンドラー ディレクトリに書き込まれ、ルーターは呼び出しのみを行います。

上記の呼び出し関係は次のとおりです。

   biz/model ===>   biz/hanlder  ===> biz/router

モデルはデータの受け入れと返却を定義し、データベースとビューのインターフェイスを接続します。ハンドラーは論理処理機能を定義し、ルーターはルーティング機能を定義します。分業は明確です。

hz上記のコードはツールを使用してワンクリックで生成でき、thrift ファイル内でそれに応じて設定するだけでよいことに注意してください。

プロジェクトの最外層にはrouter.goidl定義以外のルーティングメソッドを定義する機能もあり、そのメソッド本体は引き続きbiz.handler以下に。
ここに画像の説明を挿入します

router_gen.goはいhz生成されたルート登録コードは、ユーザー定義ルートと hz によって生成されたルートを呼び出すために使用され、その後、main 関数を呼び出してすべてのルートを開始します。

また、router.go を削除して、それをすべて idl で定義することもできます。これは理解しやすいです。biz ディレクトリ内のルーターが呼び出されると、その中にあるすべてのルーティング定義が呼び出されます。ディレクトリ内の Router_gen は自動的にルーターを呼び出します。これにより、サーバーのすべてのサービスが開始できるようになります。

通常の状況では、thrift ファイル内でアノテーションを直接設定するだけで、hz を通じて自動的に生成されます。IDLアノテーションの説明

thrift ファイルを次のように変更します。

namespace go demo

struct addStoreReq{
    1:i32 id
    2:string storeName
    3:i32 type
    4:string uuid
    5:string identitionTime
    6:string createAt
    7:i32 status
}


struct deleteReq{
    1:i32 id
}

struct updateReq{
    1:i32 id
    2:string storeName
    3:i32 type
    4:string uuid
    5:string identitionTime
    6:string createAt
    7:i32 status
}

struct getStoreReq{
    1:i32 id
    2:string storeName
    3:i32 type
    4:string uuid
    5:string identitionTime
    6:string createAt
    7:i32 status
}

// 定义HTTP方法,通过hertz注解自动生成
service storeInterface{
    i32 addStore(1:addStoreReq req)  (api.post="/addstore")
    i32 deleteStore(1:deleteReq req) (api.get="/deletestore")
    i32 updateStore(1:updateReq req) (api.post="/updatestore")
    list<getStoreReq>getStore(1:i32 id 2:string uuid) (api.get="/getstore")
}

以下に示すように、コマンドを使用してhz update -idl demo.thrift --module demo、更新された thrift ファイルを生成します。コンテキスト パラメータが欠落しているため、モデル内のすべてのファイルがエラーを報告することがわかります。これは、thrift のバージョンが高すぎるためです。このコマンドを画像の説明を追加してください
使用してgo mod edit -replace github.com/apache/thrift=github.com/apache/[email protected]、再生成してください。それ。

hzコマンドによって生成されたファイルは直接使用できます。次のように生成された後は、コードを変更せずにサーバーを直接起動できます。

ここに画像の説明を挿入します現時点では、biz/handlerルーティング ロジックのメソッド本体を変更するだけで済みます。ヘルツデモ

Supongo que te gusta

Origin blog.csdn.net/xwh3165037789/article/details/134950345
Recomendado
Clasificación