Skip to content

learncode/pubsubclient

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pubsub client

A client library for Google PUB/SUB written in GO

Features

  • Create a topic.
  • Create a subscription.
  • Publish messages to a topic.
  • Use a pull subscriber to output individual topic messages.

Creating the publisher

// Import the package
import pubsubclient

// Publisher config requires a project name.
publisherConfig := pubsubclient.PublisherConfig{
    ProjectID: projectName,
}

// Passing the context and a config to GetPublisher fetches a publisher and errors
ctx := context.Background()
publisher, err := pubsubclient.GetPublisher(ctx, publisherConfig)

// Handle any errors as fatal and do not proceed further
if err != nil {
    log.Fatalf("Error occured while creating a publisher, Err: %v", err)
}


// StopAll method will be used to publish all the messages and stop all
// the goroutines that handle publish. There by gauranteeing the messages
// are flushed out from the internal queue to google pub/sub
defer publisher.StopAll()

// All's good go ahead and publish
for i := 0; i < 100; i++ {
    // Publish returns an error. The publish method also gives the ability
    // to publish the `same message` to more than `one topic`
    id, err := publisher.Publish(ctx, i, []string{topicName})
    if err != nil {
        log.Printf("Error occured while publishing the message, Err: %v", err)
    }
    log.Printf("MessageID: %v", id)
}

Creating the subscriber

// Imports the package
import pubsubclient

// Subscriber config requires a ProjectID, topicname, subscriptionName, ErrorHandler to
// handle errors, Handle func to process the messages

subscriberConfig := pubsubclient.SubscriberConfig{
    ProjectID:        projectName,
    TopicName:        topicName,
    SubscriptionName: subscriptionName,
    ErrorHandler: func(err error) {
        log.Printf("Subscriber error: %v", err)
    },
    Handle: func(output chan *pubsub.Message) {
        for {
            pMsg := <-output
            log.Printf("Message: %+v", string(pMsg.Data))
            pMsg.Ack()
        }
    },
}

// Passing the context and config to CreateSubscription fetches a subscriber and errors
ctx := context.Background()
subscriber, err := pubsubclient.CreateSubscription(ctx, subscriberConfig)

// Handle any errors as fatal and do not proceed further
if err != nil {
    log.Fatalf("Error occured while creating a subscriber, Err: %v", err)
}

// Process will start pulling from the pubsub. The process accepts a waitgroup as
// it will be easier for us to orchestrate a use case where one application needs
// more than one subscriber
var wg sync.WaitGroup
wg.Add(1)
go subscriber.Process(ctx, &wg)
publishMessages(ctx, publisher)
publishMessages(ctx, publisher)
wg.Wait()

For a good idea on how to use the client please check the pubsub_test.go file.

About

A client library for Google PUB/SUB

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published