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  }