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 인터페이스 코드를 생성해야 합니다. 구체적인 단계는 다음과 같습니다.
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"이라는 유형이 정의되고 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!