github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/23_proto_actor/cluster-metrics/seed/main.go (about) 1 package main 2 3 import ( 4 "log" 5 6 console "github.com/AsynkronIT/goconsole" 7 "github.com/AsynkronIT/protoactor-go/actor" 8 "github.com/AsynkronIT/protoactor-go/cluster" 9 "github.com/AsynkronIT/protoactor-go/cluster/consul" 10 "github.com/AsynkronIT/protoactor-go/examples/cluster/shared" 11 "github.com/AsynkronIT/protoactor-go/remote" 12 ) 13 14 func Logger(next actor.ReceiverFunc) actor.ReceiverFunc { 15 fn := func(context actor.ReceiverContext, env *actor.MessageEnvelope) { 16 switch env.Message.(type) { 17 case *actor.Started: 18 log.Printf("actor started " + context.Self().String()) 19 case *actor.Stopped: 20 log.Printf("actor stopped " + context.Self().String()) 21 } 22 next(context, env) 23 } 24 25 return fn 26 } 27 28 func main() { 29 // this node knows about Hello kind 30 remote.Register("Hello", actor.PropsFromProducer(func() actor.Actor { 31 return &shared.HelloActor{} 32 }).WithReceiverMiddleware(Logger)) 33 34 cp, err := consul.New() 35 if err != nil { 36 log.Fatal(err) 37 } 38 cluster.Start("mycluster", "127.0.0.1:8080", cp) 39 40 hello := shared.GetHelloGrain("MyGrain") 41 42 res, err := hello.SayHello(&shared.HelloRequest{Name: "Roger"}) 43 if err != nil { 44 log.Fatal(err) 45 } 46 log.Printf("Message from grain: %v", res.Message) 47 console.ReadLine() 48 }