完成一个简单的RPC调用 worker.go
时间: 2024-11-25 14:09:08 浏览: 5
完成一个简单的RPC调用通常需要两个部分:服务提供者(server.go)和服务消费者(worker.go)。这里是一个使用Go语言(gRPC)作为示例的简单RPC调用过程。首先,假设我们有`echo`服务接口和其实现:
**server.go (服务提供者)**
```go
// echo.proto
syntax = "proto3";
package rpc;
service EchoService {
rpc Echo(EchoRequest) returns (EchoResponse) {}
}
message EchoRequest {
string message = 1;
}
message EchoResponse {
string message = 2;
}
```
编译生成`echo.pb`文件:
```sh
protoc -I=$GOPATH/src -I=$(pwd) -o $(pwd)/echo.pb echo.proto
```
然后创建服务器端实现:
```go
// server.go
import (
"google.golang.org/grpc"
"log"
pb "path/to/your/project/rpc"
)
func main() {
listener, err := grpc.Listen("0.0.0.0:50051", grpc.ServerCredentials(insecureServerCredentials()))
if err != nil {
log.Fatal(err)
}
s := pb.NewEchoServiceServer()
err = grpc.Serve(s, listener)
if err != nil {
log.Fatal(err)
}
}
func insecureServerCredentials() credentials.TransportSecurityLevel {
return credentials.NewInsecureCredentials()
}
```
**worker.go (服务消费者)**
```go
// worker.go
import (
"context"
"fmt"
"path/to/your/project/rpc"
"github.com/golang/protobuf/ptypes"
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
client := pb.NewEchoServiceClient(conn)
req := &pb.EchoRequest{
Message: ptypes.StringValue("Hello from client"),
}
resp, err := client.Echo(context.Background(), req)
if err != nil {
log.Fatalf("failed to greet: %v", err)
}
fmt.Printf("Server echoed: %s\n", resp.Message)
}
```
在这个例子中,`worker.go`创建了一个到`server.go`提供的`EchoService`的连接,并发送一个请求,等待响应。`Echo`方法会将消息返回给客户端。
阅读全文