在Golang中为gRPC服务器添加处理程序

时间:2019-10-16 04:23:21

标签: go grpc amazon-kinesis

我的server/server.go服务器具有以下gRPC定义:

package main

import (
    "flag"

    "github.com/golang/glog"
    pb "github.com/go-grpc-tutorial/pb"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "net"
)

// Implements of EchoServiceServer

type echoServer struct{}

func newEchoServer() pb.EchoServiceServer {
    return new(echoServer)
}

func (s *echoServer) Echo(ctx context.Context, msg *pb.Message) (*pb.Message, error) {
    glog.Info(msg)
    return msg, nil
}

func Run() error {
    listen, err := net.Listen("tcp", ":50051")
    if err != nil {
        return err
    }
    server := grpc.NewServer()
    pb.RegisterEchoServiceServer(server, newEchoServer())
    server.Serve(listen)
    return nil
}

func main() {
    flag.Parse()
    defer glog.Flush()

    if err := Run(); err != nil {
        glog.Fatal(err)
    }
}

我希望服务器从Kinesis流中进行侦听,因此每当一条消息发布到Kinesis流中时,它将使用该消息并将其发送到Echo()方法。 所以,我正在设想类似的东西:

func handleKinesis(s *echoServer) error {
    // wait until a message is published to the kinesis stream
    records, err := readFromKinesis() // not implemented here
    if err != nil {
      return err
    }
    for _, record := records {
       message := string(record.Data)
       _, _ = s.Echo(context.Background(), &pb.Message{msg: message})
    }
}

handleKinesis将在后台运行,仅侦听新的Kinesis消息,然后调用echoServer处理该消息。 我该怎么做?

0 个答案:

没有答案