최근 몇 년 동안 클라우드 컴퓨팅과 빅 데이터의 급속한 발전으로 인해 점점 더 많은 기업이 마이크로서비스 아키텍처를 사용하여 애플리케이션을 구축하기 시작했습니다. gRPC는 마이크로서비스 간 통신에 널리 사용되는 효율적이고 현대적인 RPC 프레임워크입니다. 이번 글에서는 이 통신 프레임워크를 보다 편리하게 사용할 수 있도록 golang에 gRPC를 설치하는 방법을 소개하겠습니다.
go version
"go 버전 go1.14.4가 darwin/amd64를 반환했습니다." 버전 정보와 유사하게 설치에 성공했습니다.
go mod init example.com/hello go get google.golang.org/grpc
그 중 "example.com/hello"는 원하는 이름으로 바꿀 수 있습니다. 이는 단지 예일 뿐입니다.
$ touch greeter.proto $ protoc --go_out=. --go-grpc_out=. greeter.proto
gRPC 서비스의 정의를 설명하는 Greetinger.proto 파일을 작성합니다.
syntax = "proto3"; package helloworld; // 定义服务接口 service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } // 定义请求和响应结构体 message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
protoc 파일을 생성하고 두 개의 해당 서비스 파일인 Greetinger.pb.go 및 Greetinger.grpc.go가 있습니다. protoc으로 컴파일할 때 두 개의 매개변수 --go_out 및 --go-grpc_out을 추가하여 해당 pb 및 grpc 파일을 생성했다는 점에 유의해야 합니다.
package main import ( "context" "log" "google.golang.org/grpc" pb "example.com/hello" // 这里是我们定义的服务包名 ) const ( address = "localhost:50051" // 服务端地址 defaultName = "world" ) func main() { // 和服务端建立连接 conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() // 创建客户端 c := pb.NewGreeterClient(conn) // 调用服务方法 name := defaultName if len(os.Args) > 1 { name = os.Args[1] } r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name} if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.Message) }
코드 주석에서 이미 명확하게 설명했으므로 여기서는 반복하지 않겠습니다.
이제 서버 및 클라이언트 코드가 완성되었으니 서비스를 실행하여 살펴보겠습니다!
greetercli.go와 동일한 디렉터리에서 다음 명령을 실행합니다.
$ go run greetersrv.go
출력이 없으면 gRPC 서비스가 로컬에서 성공적으로 시작된 것입니다. 다음으로 새 터미널 창에서 클라이언트를 실행합니다.
$ go run greetercli.go Greeting: Hello world
여기서 출력 결과는 정의한 입력 매개변수에 따라 조정될 수 있습니다.
지금까지 이 글의 내용은 기본적으로 golang에 gRPC를 설치하는 전체 과정을 다루었습니다. 독자들에게 도움이 되기를 바랍니다. 물론 gRPC 서비스에 대한 심층적인 연구를 위해서는 여전히 더 많은 세부 사항과 사양을 숙지하고 지식 시스템을 지속적으로 개선하고 확장해야 합니다.
위 내용은 golang에 gRPC를 설치하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!