>백엔드 개발 >Golang >Thrift golang 구현의 핵심 원칙과 사용법을 설명합니다.

Thrift golang 구현의 핵심 원칙과 사용법을 설명합니다.

PHPz
PHPz원래의
2023-04-05 13:50:311493검색

Thrift는 교차 언어, 다중 서비스 유형의 원격 서비스 프레임워크로, 교차 언어 RPC 인터페이스를 정의하기 위해 IDL에서 정의한 인터페이스 설명 언어의 사용을 지원합니다. 그 중 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 파일은 "SayHello", "Add" 및 "GetPerson"이라는 세 가지 메서드를 포함하는 "DemoService"라는 서비스를 정의합니다. 그 중 "Add" 메소드의 매개변수에는 두 개의 정수 매개변수 a, b가 포함되며, 반환값은 정수이다. "GetPerson" 메소드의 매개변수는 정수 ID이며 "Person" 구조를 반환합니다.

2. Go 코드 생성

다음으로 gothrift 도구를 사용하여 해당 golang 인터페이스 코드를 생성해야 합니다. 구체적인 단계는 다음과 같습니다.

  • Gothrift 설치

go 명령줄 도구를 사용하여 gothrift 설치:

go get github.com/apache/thrift/lib/go/thrift
  • gothrift 실행

생성된 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"이라는 유형이 정의되고 "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 설치

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.