Thrift は、クロスランゲージ、マルチサービス型のリモート サービス フレームワークであり、IDL で定義されたインターフェイス記述言語の使用をサポートし、クロスランゲージ RPC インターフェイスを定義します。その中でも、Thrift の golang 実装は、軽量で効率的な RPC フレームワークを提供し、分散システムで広く使用されています。この記事では、Thrift golang 実装の中心的な原則と使用法について説明します。
1. Thrift golang 実装の動作原理
Thrift は IDL 言語を使用してインターフェイスを定義し、コード ジェネレーターを通じてさまざまな言語でインターフェイス コードを生成し、RPC プロトコルを使用して異なる言語間のコミュニケーション。 Thrift の golang 実装もこのアイデアを採用しており、gothrift ツールを使用して Go 言語インターフェイス コードを生成し、異なる言語間の RPC 通信を実装します。
具体的には、Thrift の golang 実装を使用するには、次の手順が必要です:
1. IDL インターフェイス ファイルを定義する
まず、IDL 言語を使用してインターフェイス ファイルを定義する必要があります。特に構文については、Thrift の公式ドキュメントを参照してください。以下は簡単な IDL の例です。
namespace go thrift.demo struct Person { 1: i32 Id 2: string Name 3: i32 Age } service DemoService { void SayHello() i32 Add(1:i32 a, 2:i32 b) Person GetPerson(1:i32 id) }
上記の IDL ファイルは、「DemoService」という名前のサービスを定義します。このサービスには、「SayHello」、「Add」、および「Getperson」の 3 つのメソッドが含まれています。このうち、「Add」メソッドのパラメータには、2 つの整数パラメータ a と b が含まれており、戻り値は整数です。 「GetPersonal」メソッドのパラメータは整数の ID であり、構造体「Person」を返します。
2. Go コードの生成
次に、gothrift ツールを使用して、対応する golang インターフェイス コードを生成する必要があります。具体的な手順は次のとおりです:
go コマンド ライン ツールを使用して gothrift をインストールします:
go get github.com/apache/thrift/lib/go/thrift
生成された IDL ファイルを使用して gothrift を実行し、Go コードを生成します。
gothrift --out=./gen --template=go thrift-demo.thrift
上記のコマンドを実行すると、golang コード ファイルが生成されます。
3. インターフェース サービスの実装
生成された golang インターフェース コードを取得した後、これらのインターフェース サービスを実装する必要があります。以下にいくつかの実装例を示します。
type demoServiceImpl struct{} func (demoServiceImpl) SayHello(ctx context.Context) (err error) { fmt.Println("Hello World") return } func (demoServiceImpl) Add(ctx context.Context, a, b int32) (int32, error) { return a + b, nil } func (demoServiceImpl) GetPerson(ctx context.Context, id int32) (*Person, error) { person := &Person{ Id: id, Name: "张三", Age: 25, } return person, nil }
上記のコードでは、「demoServiceImpl」という名前の型が定義され、3 つのメソッド「SayHello」、「Add」、および「Getperson」が実装されています。
4. サービスを開く
インターフェイス サービスの実装が完了したら、リモート呼び出し用のサービスを開く必要があります。以下にサンプル コードを示します。
transportFactory := thrift.NewTBufferedTransportFactory(8192) protocolFactory := thrift.NewTBinaryProtocolFactoryDefault() addr := "localhost:9091" transport, err := thrift.NewTServerSocket(addr) if err != nil { return } handler := &demoServiceImpl{} processor := demo.NewDemoServiceProcessor(handler) server := thrift.NewTSimpleServer4(processor, transport, transportFactory, protocolFactory) server.Serve()
上記のコードでは、まず「NewTBufferedTransportFactory」と「NewTBinaryProtocolFactoryDefault」を使用して、transportFactory オブジェクトとprotocolFactory オブジェクトを作成します。次に、「NewTServerSocket」を使用して、指定したアドレスで ServerSocket を開きます。次に、「DemoService」インターフェイスを実装する「demoServiceImpl」オブジェクトを渡し、「DemoServiceProcessor」プロセッサを作成します。最後に、「NewTSimpleServer4」を使用してサービス監視を有効にします。
2. Thrift golang 実装の使用方法
Thrift golang 実装の使用方法を以下に紹介します:
1. Thrift のインストール
バイナリ パッケージをダウンロードします。節約してインストールする。
2. IDL ファイルの作成
IDL 言語を使用してインターフェイス ファイルを定義し、インターフェイス メソッドとデータ型を定義します。
3. Golang インターフェース コードの生成
gothrift ツールを使用して Golang インターフェース コードを生成します。上記の手順を参照してください。
4. インターフェースサービスの実装
生成されたインターフェース定義を元にインターフェースサービスの実装コードを記述します。
5. サービスの開始
サンプルコードに従って、Thrift サーバーの監視を有効にします。
6. クライアント呼び出しインターフェイス
Thrift クライアントは、生成された Golang インターフェイス コードを通じてリモート呼び出しを行います。以下は簡単なサンプル コードです:
transport, err := thrift.NewTSocket("localhost:9091") if err != nil { panic(err) } if err := transport.Open(); err != nil { panic(err) } defer transport.Close() protocolFactory := thrift.NewTBinaryProtocolFactoryDefault() client := demo.NewDemoServiceClientFactory(transport, protocolFactory) if err := client.SayHello(context.Background()); err != nil { panic(err) } res, _ := client.Add(context.Background(), 1, 2) fmt.Println(res) person, _ := client.GetPerson(context.Background(), 1) fmt.Println(person)
上記のコードでは、まずクライアント トランスポート オブジェクトを作成し、Thrift サーバーに接続します。次に、「NewDemoServiceClientFactory」クライアント オブジェクトを作成し、「SayHello」、「Add」、および「Getperson」メソッドを使用してリモート呼び出しを行います。
概要:
この記事では、Thrift golang 実装の動作原理と使用法を紹介します。 Thrift を使用して RPC を実装すると、開発コストを効果的に削減し、システム開発の進捗をスピードアップできます。 Thrift の golang 実装は、分散システムで広く使用されている軽量で効率的な RPC フレームワークです。
以上がThrift golang 実装の中心原則と使用法を説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。