github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/23_proto_actor/remoteheader/node2/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/examples/remotebenchmark/messages" 9 "github.com/AsynkronIT/protoactor-go/remote" 10 ) 11 12 func main() { 13 remote.Start("127.0.0.1:8080") 14 var sender *actor.PID 15 rootContext := actor.EmptyRootContext 16 props := actor. 17 PropsFromFunc( 18 func(context actor.Context) { 19 switch msg := context.Message().(type) { 20 case *messages.StartRemote: 21 log.Println("Starting") 22 sender = msg.Sender 23 context.Respond(&messages.Start{}) 24 case *messages.Ping: 25 context.Send(sender, &messages.Pong{}) 26 } 27 }). 28 WithSenderMiddleware( 29 func(next actor.SenderFunc) actor.SenderFunc { 30 return func(ctx actor.SenderContext, target *actor.PID, envelope *actor.MessageEnvelope) { 31 envelope.SetHeader("test_header", "header_from_node2") 32 log.Println("set header") 33 next(ctx, target, envelope) 34 } 35 }) 36 37 rootContext.SpawnNamed(props, "remote") 38 39 console.ReadLine() 40 }