github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/pubsub/srv/main.go (about) 1 package main 2 3 import ( 4 proto "github.com/micro/go-micro/examples/pubsub/srv/proto" 5 "github.com/micro/go-micro/v2" 6 "github.com/micro/go-micro/v2/metadata" 7 "github.com/micro/go-micro/v2/server" 8 "github.com/micro/go-micro/v2/util/log" 9 10 "context" 11 ) 12 13 // All methods of Sub will be executed when 14 // a message is received 15 type Sub struct{} 16 17 // Method can be of any name 18 func (s *Sub) Process(ctx context.Context, event *proto.Event) error { 19 md, _ := metadata.FromContext(ctx) 20 log.Logf("[pubsub.1] Received event %+v with metadata %+v\n", event, md) 21 // do something with event 22 return nil 23 } 24 25 // Alternatively a function can be used 26 func subEv(ctx context.Context, event *proto.Event) error { 27 md, _ := metadata.FromContext(ctx) 28 log.Logf("[pubsub.2] Received event %+v with metadata %+v\n", event, md) 29 // do something with event 30 return nil 31 } 32 33 func main() { 34 // create a service 35 service := micro.NewService( 36 micro.Name("go.micro.srv.pubsub"), 37 ) 38 // parse command line 39 service.Init() 40 41 // register subscriber 42 micro.RegisterSubscriber("example.topic.pubsub.1", service.Server(), new(Sub)) 43 44 // register subscriber with queue, each message is delivered to a unique subscriber 45 micro.RegisterSubscriber("example.topic.pubsub.2", service.Server(), subEv, server.SubscriberQueue("queue.pubsub")) 46 47 if err := service.Run(); err != nil { 48 log.Fatal(err) 49 } 50 }