我的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
处理该消息。
我该怎么做?