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  }