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  }