Heim >Backend-Entwicklung >Golang >Erklären Sie die Grundprinzipien und die Verwendung der Thrift-Golang-Implementierung

Erklären Sie die Grundprinzipien und die Verwendung der Thrift-Golang-Implementierung

PHPz
PHPzOriginal
2023-04-05 13:50:311460Durchsuche

Thrift ist ein sprachübergreifendes Remote-Service-Framework mit mehreren Diensten. Es unterstützt die Verwendung der von IDL definierten Schnittstellenbeschreibungssprache zur Definition sprachübergreifender RPC-Schnittstellen. Unter anderem bietet die Golang-Implementierung von Thrift ein leichtes und effizientes RPC-Framework, das in verteilten Systemen weit verbreitet ist. In diesem Artikel werden die Grundprinzipien und die Verwendung der Thrift-Golang-Implementierung erläutert.

1. Funktionsprinzip der Thrift-Golang-Implementierung

Thrift verwendet die IDL-Sprache, um Schnittstellen zu definieren, generiert Schnittstellencodes in verschiedenen Sprachen über einen Codegenerator und verwendet dann das RPC-Protokoll, um zwischen verschiedenen Sprachen zu kommunizieren. Auch die Golang-Implementierung von Thrift übernimmt diese Idee und generiert mithilfe des Gothrift-Tools Code für die Go-Sprachschnittstelle, um die RPC-Kommunikation zwischen verschiedenen Sprachen zu implementieren.

Konkret erfordert die Verwendung der Golang-Implementierung die folgenden Schritte:

1. Definieren Sie die IDL-Schnittstellendatei.

Zuerst müssen Sie die Schnittstellendatei mithilfe der IDL-Sprache definieren. Informationen zur spezifischen Syntax finden Sie in der offiziellen Dokumentation von Thrift. Das Folgende ist ein einfaches IDL-Beispiel:

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)
}

Die obige IDL-Datei definiert einen Dienst mit dem Namen „DemoService“, der drei Methoden „SayHello“, „Add“ und „GetPerson“ enthält. Zu den Parametern der Methode „Add“ gehören unter anderem zwei ganzzahlige Parameter a und b, und der Rückgabewert ist eine ganze Zahl. Der Parameter der Methode „GetPerson“ ist eine ganzzahlige ID und gibt eine Struktur „Person“ zurück.

2. Go-Code generieren

Als nächstes müssen Sie das Gothrift-Tool verwenden, um den entsprechenden Golang-Schnittstellencode zu generieren. Die spezifischen Schritte sind wie folgt:

  • Installieren Sie Gothrift

Verwenden Sie das Go-Befehlszeilentool, um Gothrift zu installieren:

go get github.com/apache/thrift/lib/go/thrift
  • Führen Sie Gothrift aus

Verwenden Sie die generierte IDL-Datei, um Gothrift auszuführen und Go-Code zu generieren:

gothrift --out=./gen --template=go thrift-demo.thrift

Nach dem Ausführen des obigen Befehls werden die Golang-Codedateien generiert.

3. Schnittstellendienste implementieren

Nachdem Sie den generierten Golang-Schnittstellencode erhalten haben, müssen Sie diese Schnittstellendienste implementieren. Hier sind einige Implementierungsbeispiele:

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
}

Im obigen Code ist ein Typ namens „demoServiceImpl“ definiert und drei Methoden „SayHello“, „Add“ und „GetPerson“ implementiert.

4. Starten Sie den Dienst

Nach Abschluss der Implementierung des Schnittstellendienstes müssen Sie den Dienst für Fernanrufe starten. Hier ist ein Beispielcode:

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()

Im obigen Code verwenden Sie zunächst „NewTBufferedTransportFactory“ und „NewTBinaryProtocolFactoryDefault“, um transportFactory- und ProtocolFactory-Objekte zu erstellen. Verwenden Sie dann „NewTServerSocket“, um ServerSocket an der angegebenen Adresse zu öffnen. Übergeben Sie dann das Objekt „demoServiceImpl“, das die Schnittstelle „DemoService“ implementiert, und erstellen Sie den Prozessor „DemoServiceProcessor“. Verwenden Sie abschließend „NewTSimpleServer4“, um die Dienstüberwachung zu aktivieren.

2. So verwenden Sie die Thrift-Golang-Implementierung:

1. Installieren Sie Thrift. Laden Sie das Binärpaket von Thrift herunter und installieren Sie es.

2. Erstellen Sie eine IDL-Datei

Verwenden Sie die IDL-Sprache, um die Schnittstellendatei zu definieren und die Schnittstellenmethoden und Datentypen zu definieren.

3. Golang-Schnittstellencode generieren

Verwenden Sie das Gothrift-Tool, um Golang-Schnittstellencode zu generieren.

4. Implementieren Sie den Schnittstellendienst

Schreiben Sie den Implementierungscode des Schnittstellendienstes basierend auf der generierten Schnittstellendefinition.

5. Aktivieren Sie den Dienst.

Aktivieren Sie gemäß dem Beispielcode die Thrift-Serverüberwachung.

6. Client-Aufrufschnittstelle

Der Thrift-Client führt Remote-Aufrufe über den generierten Golang-Schnittstellencode durch. Das Folgende ist ein einfacher Beispielcode:

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)

Erstellen Sie im obigen Code zunächst das Client-Transportobjekt und stellen Sie eine Verbindung zum Thrift-Server her. Erstellen Sie dann das Client-Objekt „NewDemoServiceClientFactory“ und verwenden Sie die Methoden „SayHello“, „Add“ und „GetPerson“, um Remote-Aufrufe durchzuführen.

Zusammenfassung:

Dieser Artikel stellt das Funktionsprinzip und die Verwendung der Thrift-Golang-Implementierung vor. Durch die Verwendung von Thrift zur Implementierung von RPC können die Entwicklungskosten effektiv gesenkt und der Systementwicklungsfortschritt beschleunigt werden. Die Golang-Implementierung von Thrift ist ein leichtes, effizientes RPC-Framework, das in verteilten Systemen weit verbreitet ist.

Das obige ist der detaillierte Inhalt vonErklären Sie die Grundprinzipien und die Verwendung der Thrift-Golang-Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn